hdu 2544 最短路(最短路第一弹)

18 篇文章 0 订阅
8 篇文章 0 订阅

hdu  2544  最短路            题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544

图论  Dijstra(迪杰斯特拉)

题目分析:求最短路,迪杰斯特拉算法是贪心、BFS思想,走每个点时找能走的点中最短的路径(直接或间接),并更新结果数组。

code:

#include<stdio.h>
#include<string.h>
#define INF 100000099
int map[110][110],dis[110],m,n;
void dijstra(int sourse,int n)
{
	int vis[110],k,l,sta=sourse;
	for(k=0;k<n;k++)
	{
		dis[k]=map[sta][k];
		vis[k]=0;
		//printf("dis[%d]==%d\n",k,dis[k]);
	}
	vis[sta]=1;
	for(k=1;k<n;k++)
	{
		int mark=sta,temp=INF;
		for(l=1;l<n;l++)
		{
			if(!vis[l]&&sta!=l)
			{
				if(map[sta][l]<INF&&dis[l]>dis[sta]+map[sta][l])
				{//这里开始写成map[sta][l]!=0,忘了初始化成INF了
					dis[l]=dis[sta]+map[sta][l];
				}
				if(dis[l]<temp)
				{
					temp=dis[l];
					mark=l;
				}
			}
		}
		if(temp==0||temp==INF)break;
		sta=mark;
		vis[mark]=1;
	}
}
int main()
{
	int a,b,c,i,j;
	while(scanf("%d%d",&m,&n)!=EOF&&m|n)
	{
		memset(map,INF,sizeof(map));
		memset(dis,INF,sizeof(dis));
		for(i=0;i<n;i++)
		{
			scanf("%d%d%d",&a,&b,&c);
			if(c<map[a-1][b-1])
			map[a-1][b-1]=map[b-1][a-1]=c;//因为是无向图 
		}
		dijstra(0,m);
		printf("%d\n",dis[m-1]);
	}
	return 0;
}
PS:最短路第一弹,迪杰斯特拉算法……弄了狠长时间啊~
PSS:一个学习笔记 http://hi.baidu.com/iohwwoilrrbcdld/item/9fee76319c62684a3175a147



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值