算法43 1003 Emergency (25 分)有点问题!!
题目
有点问题
代码里默认列表全部都是先只定义了,默认值就不稳定;
问题在这int nms[500];//最短路径数
这里nms全部是为0的,如果把nms[500]改成nms[c],nms里面的值又有问题了;
然后单独定义一个列表里面的值都是乱的,很奇怪
code
dijkstra感觉有动规的味道,😕
#include <iostream>
using namespace std;
const int ifnt=99999;
bool rcd[500];
int main()
{
int c, r,s0,s1;
int tm[500];
int team[500];
int rd[500][500];
fill(rd[0],rd[0]+500*500,ifnt);
//read
cin>>c>>r>>s0>>s1;
for(int i=0;i<c;i++){
cin>>tm[i];
}
for(int i=0;i<r;i++){
int p0,p1,lt;
cin>>p0>>p1>>lt;
rd[p0][p1]=rd[p1][p0]=lt;
}
team[s0]=tm[s0];
auto road=rd[s0];//distance 2 s0
road[s0]=0;
int nms[500];//最短路径数
nms[s0]=1;
for(int i=0;i<c;i++){//times
int place=-1;
int minv=ifnt;
for(int j=0;j<c;j++){//adjacent
if(road[j]<minv&&rcd[j]!=1){
place=j;
minv=road[j];
}
}
if(place==-1) break;
rcd[place]=1;
for(int k=0;k<c;k++){//优化路径
if(rcd[k]==0&&road[k]>road[place]+rd[place][k]){
road[k]=road[place]+rd[place][k];
nms[k]=nms[place];
team[k]=team[place]+tm[k];
}else if(rcd[k]==0&&road[k]==road[place]+rd[place][k]){
nms[k]=nms[k]+nms[place];
if(team[k]<team[place]+tm[k])
team[k]=team[place]+tm[k];
}
}
}
cout<<nms[s1]<<" "<<team[s1]<<endl;
return 0;
}