题意:求从1到n的最短路距离
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <queue> #include <stack> using namespace std; #define maxn 2005 int head[maxn]; int cnt; int visit[maxn]; int dist[maxn]; const int oo=0x3f3f3f3f; struct node { int u,v,next,w; }e[maxn]; void Init(int Start,int End) { for(int i=Start;i<=End;i++) dist[i]=oo; memset(head,-1,sizeof(head)); for(int i=Start;i<=End;i++) e[i].next=-1; } void add(int u,int v,int w) { e[cnt].u=u; e[cnt].v=v; e[cnt].w=w; e[cnt].next=head[u]; head[u]=cnt++; } int Spfa(int Start,int End) { stack<int>sta; dist[Start]=0; sta.push(Start); memset(visit,0,sizeof(visit)); while(sta.size()) { int s=sta.top(); sta.pop(); visit[s]=0; for(int i=head[s];i!=-1;i=e[i].next) { int u=e[i].u; int v=e[i].v; int w=e[i].w; if(dist[u]+w<dist[v]) { dist[v]=dist[u]+w; if(visit[v]==0) { visit[v]=1; sta.push(v); } } } } return dist[End]; } int main() { int t,n; while(~scanf("%d",&t)) { scanf("%d",&n); Init(1,n); int u,v,w; for(int i=1;i<=t;i++) { scanf("%d%d%d",&u,&v,&w); add(u,v,w); add(v,u,w);//由于未添加这个边,错啦n多次。 } int ans=Spfa(1,n); printf("%d\n",ans); } return 0; }
时间: 2024-10-03 21:54:12