• 数据结构上机实验dfs&&bfs遍历图


    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<queue>
    #include<stack>
    #include<algorithm>
    #define MAX 1000
    using namespace std;
    int head[MAX],ans;
    int vis[MAX],viss[MAX];
    int map[MAX],ant;
    queue<int>q;
    struct node
    {
    	int u,v,next;
    }edge[MAX];
    void init()
    {
    	memset(head,-1,sizeof(head));
    	ans=0;
    }
    void add(int u,int v)
    {
    	edge[ans].u=u;
    	edge[ans].v=v;
    	edge[ans].next=head[u];
    	head[u]=ans++;
    }
    void bfs(int beg)
    {
    	int i,j;
    	vis[beg]=1;
    	q.push(beg);  
    	printf("%d ",beg);
    	while(!q.empty())
    	{
    		int u=q.front();
    		q.pop();
    		for(i=head[u];i!=-1;i=edge[i].next)
    		{
    			int v=edge[i].v;
    			if(!vis[v])
    			{
    				printf("%d ",v);
    				vis[v]=1;
    				q.push(v);
    			} 
    		}
    	}
    	printf("
    ");
    }
    void dfs(int beg)
    {
    	int i,j;
    	vis[beg]=1;
    	if(!viss[beg])
    	{
    		map[ant++]=beg;
    		viss[beg]=1;
    	}
    	for(i=head[beg];i!=-1;i=edge[i].next)
    	{
    		int v=edge[i].v;
    		if(!vis[v])
    		{
    			if(!viss[v])
    			{
    				map[ant++]=v;
    				viss[v]=1;
    			}
    			vis[v]=1;
    			dfs(v);
    			vis[v]=0; 
    		} 
    	}
    }
    int main()
    {
    	int n,m,j,i,k,a,b;
    	int start;
    	while(1)
    	{
    		init();
    		printf("请输入你要创建的图的顶点连线的对数
    ");
    		scanf("%d",&n);
    		printf("请输入每对顶点的值
    ");
    		while(n--)
    		{
    			scanf("%d%d",&a,&b);
    			add(a,b);
    			add(b,a); 
    		}
    		while(1)
    		{
    			printf("请输入你要开始广度优先遍历的起点,如果你想要退出进行其他操作请输入-1
    ");
    		    memset(vis,0,sizeof(vis));
    			while(!q.empty())
    			    q.pop();
    			scanf("%d",&start);
    		    if(start==-1)
    			    break; 
    		    bfs(start);
    		}
    		while(1)
    		{
    			printf("请输入你要开始深度优先遍历的起点,如果你想要退出进行其他操作请输入-1
    ");
    		    memset(vis,0,sizeof(vis));
    		    memset(viss,0,sizeof(viss));
    			while(!q.empty())
    			    q.pop();
    			scanf("%d",&start);
    		    if(start==-1)
    			    break; 
    			ant=0;
    		    dfs(start);
    		    for(i=0;i<ant;i++)
    		    {
    		    	if(map[i]!=map[i+1])
    		    	printf("%d ",map[i]);
    		    }
    		    printf("
    ");
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    js初学
    普通的checkbox的回显功能
    Jquery的显示与隐藏
    jQuery 事件
    jquery选择器(1)
    页面截取字段和转码,页面截取字段时候需要进入JS
    页面中的多选框的非空判断
    jquery中清空
    java代码拼写sql
    iframe中用到的例子
  • 原文地址:https://www.cnblogs.com/tonghao/p/5018714.html
Copyright © 2020-2023  润新知