HDU 2544 最短路

 http://acm.hdu.edu.cn/showproblem.php?pid=2544

自己写的最短路第一题,dijstra算法

 

#include<stdio.h>
#include<iostream>
using namespace std;
int dp[105][105];
int dijstra(int beg,int end)
{
	bool flag[105];
	int path[105];
	int i,min;
	for(i=beg;i<=end;i++)
	{
		path[i]=INT_MAX;
		flag[i]=true;
	}
	path[beg]=0;
	flag[beg]=false;
	while(beg!=end)
	{
	for(i=1;i<=end;i++)
	{
       if(dp[beg][i]&&path[i]>path[beg]+dp[beg][i])
		   path[i]=path[beg]+dp[beg][i];
	}
	min=INT_MAX;
	for(i=1;i<=end;i++)
	{
		if(flag[i]&&path[i]<min)
		{
			beg=i;
			min=path[i];

		}
	}
	flag[beg]=false;
	}
	return path[end];
}
int main()
{
	int n,m,a,b,c;
	while(~scanf("%d%d",&n,&m),n+m)
	{
       memset(dp,0,sizeof(dp));
		while(m--)
		{
			scanf("%d%d%d",&a,&b,&c);
			if(!dp[a][b])
			     dp[a][b]=dp[b][a]=c;
			else 
				dp[a][b]=dp[b][a]=c<dp[a][b]?c:dp[a][b];
			
		}
		printf("%d\n",dijstra(1,n));
	}
	return 0;
}

第一道的SPFA,关于SPFA下面这个博客讲的很清楚,orz呀

http://blog.sina.com.cn/s/blog_4f3b79d00100ao4z.html

#include<stdio.h>
#include<vector>
#include<queue>
#define MAX 105
#define INF 1<<28
using namespace std;
struct node
{
	int v,w;
};
vector<node> g[MAX];
queue<int> q;
int n,m;
int spfa(int beg,int end)
{
	int i,path[MAX];
	bool flag[MAX];
	for(i=1;i<=n;i++)
	{
		flag[i]=0;
		path[i]=INF;
	}
	path[beg]=0;
	flag[beg]=1;
	q.push(beg);
	while(!q.empty())
	{
		int k=q.front();
		q.pop();
		flag[k]=0;
		for(i=0;i<g[k].size();i++)
		{
			int v=g[k][i].v;
			int w=g[k][i].w;
			if(path[v]>path[k]+w)
			{
				path[v]=path[k]+w;
			if(!flag[v])
			{
				flag[v]=1;
				q.push(v);
			}
			}
		}
	}
	return path[end];
}
int main()
{
	
	int a,b,c,i;
	while(~scanf("%d%d",&n,&m),n+m)
	{
		for(i=0;i<=n;i++)
			g[i].clear();
		while(m--)
		{
			scanf("%d%d%d",&a,&b,&c);
			node t;
			t.v=a;
			t.w=c;
			g[b].push_back(t);
			t.v=b;
			g[a].push_back(t);

		}
		printf("%d\n",spfa(1,n));
	}
	return 0;
}


 

你可能感兴趣的:(HDU 2544 最短路)