基于邻接表的深度优先搜索遍历

基于邻接表的深度优先搜索遍历

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

请定一个无向图,顶点编号从0到n-1,用深度优先搜索(DFS),遍历并输出。遍历时,先遍历节点编号小的。

输入

输入第一行为整数n(0 < n < 100),表示数据的组数。 对于每组数据,第一行是两个整数k,m(0 < k < 100,0 < m < k*k),表示有m条边,k个顶点。 下面的m行,每行是空格隔开的两个整数u,v,表示一条连接u,v顶点的无向边。

输出

输出有n行,对应n组输出,每行为用空格隔开的k个整数,对应一组数据,表示DFS的遍历结果。

示例输入

1
4 4
0 1
0 2
0 3
2 3

示例输出

0 1 2 3
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<cstdlib>
 5 #include<queue>
 6 using namespace std;
 7 struct vode
 8 {
 9     int v;
10     struct vode *next;
11 };
12 struct vode *f[1000001];
13 int m,n,k,flag,visited[101];
14 void add(int u,int v)
15 {
16     struct vode *p;
17     p=(struct vode *)malloc(sizeof(struct vode));
18     p->v=v;
19     p->next=f[u];
20     f[u]=p;
21 }
22 void paixu(struct vode *head)
23 {
24     struct vode *p,*q;
25     int k=0;
26     while(k=!k)
27     {
28         p=head;
29         q=p->next;
30         while(q)
31         {
32             if(p->v>q->v)
33             {
34                 int t;
35                 t=p->v;
36                 p->v=q->v;
37                 q->v=t;
38                 k=0;
39             }
40             else
41             {
42                 p=p->next;
43                 q=p->next;
44             }
45         }
46     }
47 }
48 void dfs(int k)
49 {
50     if(flag==0)
51     {
52         cout<<k;
53         flag=1;
54     }
55     else
56         cout<<" "<<k;
57     visited[k]=1;
58     struct vode *p;
59     p=f[k];
60     paixu(p);
61     while(p)
62     {
63         if(visited[p->v]==0)
64             dfs(p->v);
65         p=p->next;
66     }
67 }
68 int main()
69 {
70     int zong;
71     cin>>zong;
72     while(zong--)
73     {
74         flag=0;
75         memset(f,0,sizeof(f));//词句不可缺少
76         memset(visited,0,sizeof(visited));
77         cin>>m>>n;
78         int i;
79         for(i=1;i<=n;i++)
80         {
81             int u,v;
82             cin>>u>>v;
83             add(u,v);
84             add(v,u);
85         }
86         dfs(0);
87         cout<<endl;
88     }
89     return 0;
90 }
View Code

 

posted @ 2013-08-07 11:32  狂盗一枝梅  阅读(838)  评论(0编辑  收藏  举报