//dij的变形。
Source Code
Problem: 1797
User: 64162451
Memory: 4124K
Time: 313MS
Language: C++
Result: Accepted
Source Code
#include<iostream>
using namespace std;
const int N=1005;
const int inf=99000000;
int n,m;
int mat[N][N];
bool visit[N];
int dis[N];
int min(int a,int b)
{
if(a<b)
return a;
return b;
}
void dij()
{
memset(visit,false,sizeof(visit));
memset(dis,0,sizeof(dis));
visit[1]=true;
dis[1]=inf;
int now=1;
for(int k=1;k<=n-1;k++)
{
int max=0,maxk=0;
for(int i=2;i<=n;i++)
{
if(mat[now][i]!=0&&!visit[i]&&dis[i]<min(dis[now],mat[now][i]))
{
dis[i]=min(dis[now],mat[now][i]);
}
if(!visit[i]&&max<dis[i])
max=dis[i],maxk=i;
}
visit[maxk]=true;
now=maxk;
if(maxk==n)
{
printf("%d\n\n",dis[n]);
return;
}
}
}
int main()
{
int cases;
scanf("%d",&cases);
for(int t=1;t<=cases;t++)
{
scanf("%d%d",&n,&m);
memset(mat,0,sizeof(mat));
int u,v,w;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&w);
mat[u][v]=mat[v][u]=w;
}
printf("Scenario #%d:\n",t);
dij();
}
return 0;
}
POJ1797 dij的变形。
最新推荐文章于 2022-02-25 19:38:17 发布