The Settlers of Catan POJ - 2258

原题链接

真是绝了,做过差不多的判重思路的题下次判重还是想不起来,我果然fw

考察:dfs+图

思路:

        利用二维数组判重,在for循环外面求最大路径,否则会少算一个结点

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <vector>
 5 using namespace std;
 6 int cnt[30][30],n,m,maxn;
 7 vector<int> v[30];
 8 void dfs(int x,int len)
 9 {
10     maxn = max(len,maxn);
11     for(int i=0;i<v[x].size();i++)
12     {
13         int j = v[x][i];
14         if(!cnt[x][j]&&!cnt[j][x])
15         {
16             cnt[x][j] = cnt[j][x] = 1;
17             dfs(j,len+1);
18             cnt[x][j] = cnt[j][x] = 0;
19         }
20     }
21 }
22 int main()
23 {
24     while(scanf("%d%d",&n,&m)!=EOF&&(n+m))
25     {
26         maxn = 0;  memset(cnt,0,sizeof cnt);
27         for(int i=0;i<n;i++) v[i].clear();
28         while(m--)
29         {
30             int x,y; scanf("%d%d",&x,&y);
31             v[x].push_back(y),v[y].push_back(x);
32         }
33         for(int i=0;i<n;i++)
34             if(!v[i].empty())
35                 dfs(i,0);
36         printf("%d\n",maxn);
37     }
38     return 0;
39 }

 

posted @ 2021-01-19 22:31  acmloser  阅读(38)  评论(0编辑  收藏  举报