hdu2544 dijkstra最短路径问题
2013-08-12 20:30
190 查看
点击打开链接//********最短路径问题***********//
//注意本题可能会存在两点之间有多条路径 //
#include<iostream>
#include<stdlib.h>
#include<limits.h>
#include<string.h>
using namespace std;
#define MP 10010//定义稍大些
#define NP 110
int map[NP][NP];
int dist[MP];
void distance(int p,int map[][NP],int N)
{
int s=-1;
int visited[NP];//表示该点是否找到最短路径,1找到,0未找到
memset(visited,0,sizeof(visited));
for(int i=1;i<=N;i++)
{
dist[i]=map[p][i];
}
visited[p]=1;//初始化改点
for(int k=1;k<N;k++)
{
int min=INT_MAX;
for(int i=1;i<=N;i++)
{
if(dist[i]<min&&!visited[i])
{
min=dist[i];
s=i;
}
}
//cout<<s<<" ";
visited[s]=1;
for(int i=2;i<=N;i++)
{
if(!visited[i]&&map[s][i]!=INT_MAX)
{
if(dist[s]+map[i][s]<dist[i])
dist[i]=dist[s]+map[i][s];
}
}
}
}
int main()
{
int M,N,a,b,c,maxNode;
while(cin>>N>>M)
{
maxNode=0;
if(M==0&&N==0) break;
for(int i=1;i<=N;i++)
for(int j=i;j<=N;j++)
{
map[i][j]=map[j][i]=INT_MAX;
}
for(int i=1;i<=M;i++)
{
cin>>a>>b>>c;
maxNode=(maxNode>max(a,b))?maxNode:max(a,b);//存在两点之间有多条路径
//*******map[a][b]应该记录最短距离
map[a][b]=map[b][a]=(map[b][a]<c)?map[a][b]:c;
}
distance(1,map,maxNode);
cout<<dist
<<endl;
}
system("pause");
return 0;
}
//注意本题可能会存在两点之间有多条路径 //
#include<iostream>
#include<stdlib.h>
#include<limits.h>
#include<string.h>
using namespace std;
#define MP 10010//定义稍大些
#define NP 110
int map[NP][NP];
int dist[MP];
void distance(int p,int map[][NP],int N)
{
int s=-1;
int visited[NP];//表示该点是否找到最短路径,1找到,0未找到
memset(visited,0,sizeof(visited));
for(int i=1;i<=N;i++)
{
dist[i]=map[p][i];
}
visited[p]=1;//初始化改点
for(int k=1;k<N;k++)
{
int min=INT_MAX;
for(int i=1;i<=N;i++)
{
if(dist[i]<min&&!visited[i])
{
min=dist[i];
s=i;
}
}
//cout<<s<<" ";
visited[s]=1;
for(int i=2;i<=N;i++)
{
if(!visited[i]&&map[s][i]!=INT_MAX)
{
if(dist[s]+map[i][s]<dist[i])
dist[i]=dist[s]+map[i][s];
}
}
}
}
int main()
{
int M,N,a,b,c,maxNode;
while(cin>>N>>M)
{
maxNode=0;
if(M==0&&N==0) break;
for(int i=1;i<=N;i++)
for(int j=i;j<=N;j++)
{
map[i][j]=map[j][i]=INT_MAX;
}
for(int i=1;i<=M;i++)
{
cin>>a>>b>>c;
maxNode=(maxNode>max(a,b))?maxNode:max(a,b);//存在两点之间有多条路径
//*******map[a][b]应该记录最短距离
map[a][b]=map[b][a]=(map[b][a]<c)?map[a][b]:c;
}
distance(1,map,maxNode);
cout<<dist
<<endl;
}
system("pause");
return 0;
}
相关文章推荐
- (阶段三 dijkstra算法温习1.2)HDU 2066 一个人的旅行(使用dijkstra来解决多源起点和多源终点的最短路径问题)
- 单源最短路径问题[Dijkstra实现]
- HDU-3790 最短路径问题(Dijkstra)
- HDU 3790 最短路径问题 裸跑dijkstra
- HDOJ题目2544 最短路(最短路径问题,Dijkstra模板)
- HDU 3790 - 最短路径问题(优化Dijkstra)
- HDU 3790 最短路径问题(SPFA || Dijkstra )
- HDU 3790 最短路径问题【Dijkstra】
- HDU -- 3790 最短路径问题 (Dijkstra+priority_queue)
- HDU 3790 最短路径问题(Dijkstra)
- HDU3790最短路径问题---DIjkstra
- Dijkstra(单源最短路径问题)
- POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
- 杭电hdu 3790 最短路径问题 dijkstra
- #HDU 3790 最短路径问题 【Dijkstra入门题】
- HDU 3790 最短路径问题(dijkstra)
- hdu3790 最短路径问题(spfa||dijkstra+两种限制条件)
- Dijkstra's 最短路径算法能不能解这个含有负权重的问题
- 贪心算法之Dijkstra单源最短路径问题
- 最短路径实现代码-->Dijkstra求解最短路径问题