您的位置:首页 > 其它

1009-I专题四

2016-07-07 10:04 459 查看
1.题意:寻找最短的从商店到赛场的路线,每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。

2.思路:这道题使用Dijkstra算法,就像画一个无向图,求两定点之间的权值和的最小值,经过搜索,把所有的点都表示出来,最后输出最小。

3.感想:应用了离散的思想和数据结构的算法

#include<iostream>
#include<stdio.h>
#include<string.h>
#define MAX 0x3f3f3f3f
using namespace std;
const int N=110;
int n,m;
int imap

;
void Fioyd(){
int i,j,k;
for( k=1;k<=n;++k )
for( i=1;i<=n;++i )
for( j=1;j<=n;++j )
imap[i][j]=min( imap[i][j],imap[i][k]+imap[k][j] );
}

int main()
{
while(cin>>n>>m&&n+m){
for(int  i=1;i<=n;++i )
for(int  j=1;j<=i;++j )
{
if( i==j ) imap[i][j]=0;
else    imap[i][j]=imap[j][i]=MAX;
}
int ii,jj,temp1;
for(int i=0;i<m;i++)
{scanf("%d %d",&ii,&jj);
scanf("%d",&temp1);
imap[ii][jj]=temp1;
imap[jj][ii]=temp1;
}

Fioyd();
printf("%d\n",imap[1]
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: