[Uva] 539 - The Settlers of Catan
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=480
图深度遍历水题, 千万别忘记visited标志位的重置.
1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 5 int gn = 0; 6 int gm = 0; 7 int longest = 0; 8 #define MAX_N 26 9 10 typedef struct _graph { 11 int nv; 12 int ne; 13 int ma[MAX_N][MAX_N]; 14 bool visited[MAX_N][MAX_N]; 15 _graph(int v, int e) { 16 memset(ma, 0, sizeof(ma)); 17 resetVisited(); 18 nv = v; 19 ne = e; 20 } 21 void addEdge(int a, int b) { 22 ma[a][b] = 1; 23 ma[b][a] = 1; 24 } 25 void resetVisited() { 26 memset(visited, 0, sizeof(visited)); 27 } 28 }graph; 29 30 void dfs(graph& g, int s, int num) { 31 if (num > longest) { 32 longest = num; 33 } 34 for (int i = 0; i < g.nv; ++i) if (g.ma[s][i] && !g.visited[s][i] && !g.visited[i][s]) { 35 g.visited[i][s] = g.visited[s][i] = true; 36 dfs(g, i, num + 1); 37 g.visited[i][s] = g.visited[s][i] = false; 38 } 39 } 40 41 int main(int argc, const char * argv[]) 42 { 43 while (scanf("%d%d", &gn, &gm)) { 44 if (gn == 0 && gm == 0) { 45 break; 46 } 47 longest = 0; 48 graph g(gn, gm); 49 for (int i = 0; i < gm; ++i) { 50 int a = 0, b = 0; 51 scanf("%d%d", &a, &b); 52 g.addEdge(a, b); 53 } 54 for (int i = 0; i < gn; ++i) { 55 dfs(g, i, 0); 56 g.resetVisited(); 57 } 58 printf("%d\n", longest); 59 } 60 return 0; 61 }
浙公网安备 33010602011771号