POJ 1144

/*
	求割点的, 就是一个点的没了,就不能形成连通图了,可以一个一个点的去试, 本解题方法就是; 
*/

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int INF = 10;
const int MAX = 100;
int map[MAX][MAX];
int map_temp[MAX][MAX];
int N;
int visit[105];
int point_flag;
int arr[105];
//第次去掉一个点,看图,还是不是强连通图; 
void DFS(int start){
	++point_flag;
	visit[start] = 1;
	for(int i=1; i<=N; ++i){		
		if(map_temp[start][i] != 0 && map_temp[start][i] != INF && (!visit[i]) ) {
			DFS(i);
		}
	}	
}
//初始化邻接矩阵 
void init(){
	for(int i=1; i<=N; ++i){
		for(int j=1; j<=N; ++j){
			if(i==j){
				map[i][j] = 0;
			}else{
				map[i][j] = INF;
			}
		}
	}
}
//将字符串的数字,转成整形,用arr接收; 
int change(char str[]){
	int len = strlen(str);
	int arri=0;
	for(int i=0; i<len; ++i){
		int sum=0;		
		while(str[i]!=' ' && str[i]!='\0'){
			sum = sum*10 + str[i++]-48;
		}	
		arr[arri++] = sum;
	}
	return arri;	
}
int main(){	
	char str[205];
	int a,b,num;
	int ch, temp;
	while(1){
		cin>>N;
		getchar();
		if(N==0) break;		
		init();
		while(1){		
			cin.getline(str, 205);
			int arri = change(str);
			a = arr[0];
			if(a == 0) break;
			for(int i=1; i<arri; ++i){
				b = arr[i];
				map[a][b] = map[b][a] = 1;
			}
		}		
		int count = 0;
		//k 表示的第次去掉的点的下标; 
		for(int k=1; k<=N; ++k){
			for(int i=1; i<=N; ++i){
				for(int j=1; j<=N; ++j){
					if(k==i || k==j){					
						map_temp[i][j] = INF;
					}
					else{					
						map_temp[i][j] = map[i][j];
					}
				}
			}
			
			memset(visit, 0, sizeof(visit));
			visit[k] = 1; 
			int start = 1; // start 表示的是从start这个点开始;遍历; 
			if(k==1)
				start = 2;
			point_flag = 0;
			DFS(start);
			if(point_flag != N-1){ //看遍历的点, 是不是遍历完所有有的点? 
				count++;
			}
		}
		printf("%d\n", count);		
	}	
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值