最短路/HDOJ 2544

最短路/HDOJ 2544

题目

在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?
题目来源:HDOJ 2544
题目链接

解法

模板题,直接跑最短路即可,Dijkstra或SPFA都可以,我用的是spfa。

代码:

#include <stdio.h>
#include <cstring>
#include <queue> 
using namespace std;
int map[110][110],dis[110],n,m,a,b,c;
bool f[110];
queue <int> Q;

void spfa()
{
	Q.push(1);
	f[1]=true;
	while (!Q.empty()) 
	{
		int now=Q.front();
		Q.pop();
		f[now]=false;
		for (int i=1;i<=n;i++) 
		{
			if (!map[now][i]) continue;
			if (dis[now]+map[now][i]<dis[i]) 
			{
				dis[i]=dis[now]+map[now][i];
				if (!f[i]) 
				{
					Q.push(i);
					f[i]=true;
				}
			}
		}
	}
}

int main()
{
	scanf("%d%d",&n,&m);
	while (n!=0 & m!=0) 
	{
		for (int i=1;i<=n;i++) dis[i]=1000000;
		for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) map[i][j]=1000000; 
		for (int i=1;i<=m;i++) 
		{
			scanf("%d%d%d",&a,&b,&c);
			if (c<map[a][b]) 
			map[a][b]=map[b][a]=c;
		}
		dis[1]=0;
		spfa();
		printf("%d\n",dis[n]);
		scanf("%d%d",&n,&m);
	}
	return 0;
} 
发布了24 篇原创文章 · 获赞 6 · 访问量 244
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览