Time Limit: 1.0 Seconds   Memory Limit: 65536K
Total Runs: 195   Accepted Runs: 144

       这一道题非常的简单,就是一道深搜的题。可惜比赛的时候我看都没看。听同学说用普通的深搜就能通过,但是我想让他更快一些,因为题意给出每一个点最多有三个分岔口,所以用邻接表的方法可以使搜索的更快。

代码:

 

1 #include<stdio.h>
2 #include<string.h>
3  struct node
4 {
5 int data;
6 int next[4];
7 }s[30];
8  int max;
9 void dfs(int x,int length)
10 {
11 int i,t,j;
12 if(length>max)
13 max=length;
14 for(i=1;i<=s[x].data;i++)
15 {
16 if(s[x].next[i]!=-1)
17 {
18 t=s[x].next[i];
19 for(j=1;j<=s[t].data ;j++)
20 if(s[t].next[j]==x)
21 {
22 s[t].next[j]=-1;
23 break;
24 }
25 s[x].next[i]=-1;
26 dfs(t,length+1);
27 s[x].next[i]=t;
28 s[t].next[j]=x;
29 }
30 }
31 }
32
33 int main()
34 {
35 int n,m,i,a,b;
36 while(scanf("%d%d",&n,&m)!=EOF)
37 {
38 max=0;
39 if(n==0 && m==0)
40 break;
41 for(i=0;i<n;i++)
42 {
43 s[i].data=0;
44 }
45 for(i=1;i<=m;i++)
46 {
47 scanf("%d%d",&a,&b);
48 s[a].next[++s[a].data]=b;
49 s[b].next[++s[b].data]=a;
50 }
51 for(i=0;i<n;i++)
52 {
53 dfs(i,0);
54 }
55 printf("%d\n",max);
56 }
57 return 0;
58 }
59