邻接矩阵的宽度遍历

sdut 2141  

 1 #include<stdio.h>   

 2 #include<string.h>   

 3 int mapp[110][110],vis[110],que[110],flag;   

 4 int k,m,t;   

 5 void bfs(int t)   

 6 {   

 7     int l=0,r=0,tt,j;   

 8     que[r++]=t;   

 9     while(l<r)   

10     {   

11         tt=que[l++];   

12         if(flag==1)   

13         {   

14             flag=0;   

15             printf("%d",tt);   

16   

17         }   

18         else  

19             printf(" %d",tt);   

20         for(j=0;j<k;j++)   

21         {   

22             if(!vis[j]&&mapp[tt][j])   //找到一个与tt相连的点并进栈。

23             {   

24                 que[r++]=j;   

25                 vis[j]=1;   

26             }   

27         }   

28   

29     }   

30 }   

31 int main ()   

32 {   

33     int n,i,a,b;   

34     scanf("%d",&n);   

35     while(n--)   

36     {   

37         memset(vis,0,sizeof(vis));   

38         memset(mapp,0,sizeof(mapp));   

39         scanf("%d %d %d",&k,&m,&t);//k个顶点,m条边,t为遍历的初始点顶点。  

40         for(i=0;i<m;i++)   

41         {   

42             scanf("%d %d",&a,&b);   

43             mapp[a][b]=mapp[b][a]=1;   

44         }   

45         flag=1;   //控制是否输出空格。

46         vis[t]=1;   

47         bfs(t);   

48         printf("\n");   

49     }   

50     return 0;   

51 }   

 

宽度搜索是采用队列的形式,队首出队,将与队首相邻的点进队。

深度搜索是递归的过程,

你可能感兴趣的:(遍历)