UVA539

来源:互联网 发布:充电宝牌子 知乎 编辑:程序博客网 时间:2024/05/21 16:57

题目的意思就是给除城市的数量,然后是道路的数量,接下去是每个道路连接哪两个城市。

要求的是从整个道路网中,找到一条最长的路。

注意的是如果给出的是两条路

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;}}


0 0
原创粉丝点击