TJU 1167. The Settlers of Catan

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

 

你可能感兴趣的:(set)