重写Dijkstra
啊我沙雕了,竟然以为DJ的邻接矩阵不用初始化。。
#include<bits/stdc++.h> #define R register int using namespace std; //const int inf=0x3f3f3f3f; inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9') if(ch=='-') f=-1,ch=getchar(); while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar(); return x*f; } int n,m,a[501][501],dis[501],inf; bool vis[501]; inline void Run() { memset(dis,0x3f,sizeof(dis)); inf=dis[1]; dis[1]=0; for(R i=1;i<n;i++) { int x=0; for(R j=1;j<=n;j++) { if((!vis[j])&&(x==0||dis[j]<dis[x])) x=j; } vis[x]=1; for(R k=1;k<=n;k++) //if(a[x][k]) dis[k]=min(dis[k],dis[x]+a[x][k]); } } int main() { n=read();m=read(); for(R i=1;i<=n;i++) for(R j=1;j<=n;j++) if(i==j) a[i][j]=0; else a[i][j]=0x3f3f3f3f;//初始化 for(R i=1;i<=m;i++) { int x=read(),y=read(),z=read(); a[x][y]=min(a[x][y],z); } Run(); if(dis[n]>=inf/2) cout<<"-1"; else printf("%d",dis[n]); return 0; }