题目的意思就是给除城市的数量,然后是道路的数量,接下去是每个道路连接哪两个城市。
要求的是从整个道路网中,找到一条最长的路。
注意的是如果给出的是两条路
1 0
0 1
那么最长路劲是2.因为这是两条不同的路,
或者
0 1
0 1
则可以走两次。
接下去就是以 每个点 为初始位置,回溯求长度;
AC代码:
#include<iostream>
using namespace std;
const int N = 25 + 5;
int city ,road;
int numvis[N][N];
int m;
void init () {
for (int i = 0 ; i < N ; i++) {
for (int j = 0 ;j < N ;j++) {
numvis[i][j] = 0;
}
}
m = 0;
}
void search(int x, int num) {
for (int j = 0 ; j < city ; j++) {
if (numvis[x][j]) {
numvis[x][j]--;
numvis[j][x]--;
search(j,num + 1);
numvis[x][j]++;
numvis[j][x]++;
}
}
if (num > m)
m = num;
}
int main() {
while (cin >> city >> road ) {
init();
if (city == 0 && road == 0)
break;
int x,y;
for (int i = 0 ; i < road ;i++) {
cin >> x >> y;
numvis[x][y]++;
numvis[y][x]++;
}
for (int i = 0 ; i < city ; i++) {
search(i,0);
}
cout << m << endl;
}
}