您的位置:首页 > 其它

UVA - 539 The Settlers of Catan

2014-10-21 19:01 369 查看
题目大意:给你N个点,M个相连接的路径,在每条路只能走一次的条件下,求最长的路径是多少

解题思路:用回溯法,简单暴力

#include<cstdio>
#include<cstring>
int n, m;
int node[50][50];
int max;

void dfs(int cur, int len) {
	for(int j = 0; j < n; j++){
		if(node[cur][j]) {
			node[cur][j]--;
			node[j][cur]--;
			dfs(j,len+1);
			node[cur][j]++;
			node[j][cur]++;	
		}	
	}
	if(max < len)
		max = len;	
}
int main() {
	int num1, num2;
	while(scanf("%d%d", &n, &m) && m) {
		memset(node,0,sizeof(node));
		for(int i = 0; i < m; i++) {
			scanf("%d %d",&num1,&num2);
			node[num1][num2]++;
			node[num2][num1]++;
		}
		max = 0;
		for(int i = 0; i < n; i++)
			dfs(i,0);
		printf("%d\n",max);
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: