重点防护(求用c++解决)

描述
在战争中,物资运输和兵力运输是非常重要的,但是,有一些城市和交通线路往往只有要落入到敌人手中,那么由于这城市的失陷,使已方控制的区域就不在连通。就会给自己造成战争的被动。往往这些城市都是已方重点防护或敌人重点进攻的对象。假设你就是某军的最搞指挥官,当你无论拿到已方地图或敌方地图,你能否尽快的在瞬息万变的战场形式下快速的找到要重点保护或是重点进攻的城市?
输入
输入有多组数据,每一组数据表示一张地图城市信息。
每一组数据的第一行为一个整数N(N<=100),接着下面有m(m<=N)行描述这个地图的数据。其中每一行由多个数据组成a1,a2,…..ak组成。表示城市a1和a2,….ak有道理相连,各个数据之间用空格分开,如:输入数据5 1 2 3 4,那么表示,城市5和其它城市1,2 ,3, 4均有通路。每一组数据输入以0结束,整个输入同样以0结束。
输出
输出重点防护的城市个数。
样例输入
5
5 1 2 3 4
0
6
2 1 3
5 4 6 2
0
9
2 1 3
7 8
5 6 4
9 8
0
3
1 2 3
2 3
0
0
样例输出
1
2
3
0

.重点防护的城市意思是去掉就会成为孤城的城市,第4组每个城市都有链接,去掉一个没有城成为孤城。所以为0图片说明,求大神告诉我如何 用0来判定每组数据,我有思路可以使用二维数组赖表示关系,连接的称为1![图片说明图片说明

https://blog.csdn.net/Zxl19990529/article/details/79521981#comments

我更新了一下博客,你看看能不能帮到你?

#include
//用二维数组描述城市间的道路,road[0][1]表是1 2间的路(等同于road[1][0],road[1][1]无意义)
//1为存在路 0为不存在
int road[100][100] = {0};
int count = 0;
int n;
//城市个数

void transf();
//将二维数组规范化
//road[i][j]为1时令road[j][i]为1
void search();
//寻找重点城市
int islone(int i, int t);
//判断当去掉t时i是否为孤城

int main ()
{

int i;
scanf("%d", &n);    
while (scanf("%d", &i) && i != 0) {
    int j = 0;
    while (scanf("%d", &j)) {
        road[i - 1][j  - 1] = 1;
        if (getchar() == '\n')
            //吸收回车
            break;
    }
}

transf();
search();
printf("%d", count);
printf("\n");
return 0;

}

void transf()
{
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (road[i][j]) {
road[j][i] = 1;
}
}
}
}

void search()
{
int i, j,t;
int flag = 0;
for (t = 0; t < n; t++){
for (i = 0; i < n; i++) {
if (islone(i, t)) {
count++;
break;
}
}
}
}

int islone(int i, int t)
{
int flag = 1;
if (i == t) return 0;
for (int j = 0; j < n; j++)
{
if (road[i][j] == 1 && j != t) {
//去掉与t有关城市的道路
flag = 0;
break;
}
}
return(flag);
}