【HDU2544】记第一次写Floyd

来源:互联网 发布:腾讯股票数据接口api 编辑:程序博客网 时间:2024/05/16 18:16
#include <iostream>#include <stdio.h>using namespace std;#define MAX 105#define INF 9999999int map[MAX][MAX];int n,m;void init(){int i,j;for(i=0;i<MAX;i++){for(j=0;j<MAX;j++){if(i==j)map[i][j]=0;elsemap[i][j]=map[j][i]=INF;}}}void floyd(){int i,j,k;for(k=0;k<n;k++){for(i=0;i<n;i++){for(j=0;j<n;j++){if(map[i][j]>map[i][k]+map[k][j])map[i][j]=map[i][k]+map[k][j];}}}}int main(){int i;while(scanf("%d %d",&n,&m)){if(n==0 || m==0)return 0;init();for(i=0;i<m;i++){int x,y;int price;cin>>x>>y>>price;x--,y--;if(map[x][y]>price)map[x][y]=map[y][x]=price;}floyd();cout<<map[0][n-1]<<endl;}return 0;}


代码本身还是不难,Floyd实现只是三个循环,但这道题需要注意的一些小问题让我WA了不少次。


1.初始化,MAX和INF这两个预编译参数最好分开来写。

2.对Map的初始化需要考虑对角线上的元素为零,其余为INF,此外,每次初始化循环上限应为MAX,而非输入的顶点数。

3.input过程中,根据输入时刻更新Map[x][y]的值(即cin>>后的if语句)

0 0
原创粉丝点击