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 }