邻接矩阵的宽度遍历

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 }   

 

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

深度搜索是递归的过程,

posted on 2013-03-30 21:50  straw_berry  阅读(207)  评论(0编辑  收藏  举报