UVa539

题目:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=480

UVa539,求无向图的最长路径

采用逐个点深搜的方式,找到一条路径,维护最大值

#include<stdio.h>
#include<string.h>
#define MAX 26
int map[MAX][MAX],visited[MAX][MAX];
int longest,vector,edge;
void dfs(int i,int d){
	int k;
	if(d>longest)
		longest=d;
	for(k=0;k<MAX;k++){
		if(!visited[k][i]&&!visited[i][k]&&map[i][k]&&k!=i){
			visited[i][k]=visited[k][i]=1;
			dfs(k,d+1);
			visited[i][k]=visited[k][i]=0;           //回溯时要改回来,是防止后面的遍历干扰前面的
		}
	}
}
int main()
{
	int i,node1,node2;
	while(scanf("%d%d",&vector,&edge)!=EOF&&(vector||edge)){
		memset(map,0,sizeof(map));
		for(i=0;i<edge;i++){
			scanf("%d%d",&node1,&node2);
			map[node1][node2]=1;
			map[node2][node1]=1;
		}
		longest=0;
		for(i=0;i<vector;i++){
			memset(visited,0,sizeof(visited));
			dfs(i,0);                                             //找最长路径,逐个节点深搜
		}
		printf("%d\n",longest);
	}
	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值