您的位置:首页 > 其它

POJ2263 dij应用

2011-08-24 23:39 169 查看
挺典型也挺简单的。

要理解清楚dij最短路算法其实是一种DP算法。

#include<iostream>

#include<map>

#include<string>

using namespace std;

int r,n;

const int N=205;

const int R=19905;

map<string,int> mymap;

int mat

;

int d
;

bool visit
;

const int inf=999999999;

int min(int a,int b)

{

if(a<b)

return a;

return b;

}

void dij(int u,int v)

{

memset(d,0,sizeof(d));

memset(visit,false,sizeof(visit));

int now=u;

visit[now]=true;

d[now]=inf;

for(int i=1;i<=n-1&&!visit[v];i++)

{

int max=0;

int maxk=0;

for(int j=1;j<=n;j++)

{

if(!visit[j])

{

if(mat[now][j]!=inf&&d[j]<min(mat[now][j],d[now]))

{

d[j]=min(mat[now][j],d[now]);

}

if(max<d[j])

{

max=d[j],maxk=j;

}

}

}

visit[maxk]=true;

now=maxk;

}

printf("%d tons\n\n",d[v]);

}

int main()

{

//freopen("C:\\Users\\wuyanyisb\\Desktop\\1.txt","r",stdin);

int cases=1;

while(scanf("%d%d",&n,&r),n!=0||r!=0)

{

mymap.clear();

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

mat[i][j]=inf;

char stra[32],strb[32];

int k=1;

int c;

for(int i=1;i<=r;i++)

{

scanf("%s",stra);

scanf("%s",strb);

scanf("%d",&c);

if(mymap[stra]==0)

mymap[stra]=k++;

if(mymap[strb]==0)

mymap[strb]=k++;

mat[mymap[stra]][mymap[strb]]=c;

mat[mymap[strb]][mymap[stra]]=c;

}

scanf("%s %s",stra,strb);

printf("Scenario #%d\n",cases++);

dij(mymap[stra],mymap[strb]);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: