下题为个人做法,只做参考。
二维数组第三个为状态,表示是否已经访问过该条路径。
/*
国王给城市修路,两个城市互相有路则为便利城市,路则为便利路,求便利路的条数。
第一行输入两个数字m,n ;m 为城市数量,n为路的总数;
接下来的n行每行输入两个数i,j : 表示i->j为一条通路
最后为一行输出,表示便利路的条数。
*/
#include "iostream"
using namespace std;
bool myPorcess(int **p, int start, int end, int size, int deep);
int main() {
int nCity = 0;
int nRoad = 0;
cin >> nCity;
cin >> nRoad;
int **pRoad = new int*[nRoad]();
for (int i = 0; i < nRoad; ++i)
pRoad[i] = new int[3]();
for (int i = 0; i < nRoad; ++i){
cin >> pRoad[i][0];
cin >> pRoad[i][1];
pRoad[i][2] = 0;
}
int count = 0;
for (int i = 0; i < nRoad; ++i) {
pRoad[i][2] = 1;
if (myPorcess(pRoad, pRoad[i][1], pRoad[i][0], nRoad, 0))
count++;
for (int j = 0; j < nRoad; ++j)
pRoad[j][2] = 0;
}
cout << count << endl;
return 0;
}
bool myPorcess(int **p,int start,int end,int size,int deep) {
if (deep != 0)
if (start == end)return true;
for (int i = 0; i < size; ++i)
if (p[i][0] == start)
if (p[i][2] == 1)
continue;
else {
p[i][2] = 1;
return myPorcess(p, p[i][1], end, size, 1);
}
return false;
}