From 197b491f4e0e34b80ad2f97ce1acc7b73480c65c Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Wed, 12 Oct 2016 10:20:59 +0800 Subject: [PATCH] Update 3562_unfinished.cpp --- SDUTOJ/3562_unfinished.cpp | 48 +++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/SDUTOJ/3562_unfinished.cpp b/SDUTOJ/3562_unfinished.cpp index 18697b4..949e6cf 100644 --- a/SDUTOJ/3562_unfinished.cpp +++ b/SDUTOJ/3562_unfinished.cpp @@ -6,22 +6,23 @@ using namespace std; #define INF 0x3f3f3f3f /** SPFA 单源最短路径算法 不支持负环*/ -const int MAXN = 1005; +#define MAXN 1005; int d[MAXN];/// distance [ From S to ... ] -int v[MAXN];/// visit +bool v[MAXN];/// visit int q[MAXN];/// 基于数组的队列(也可用queue等...) int mp[MAXN][MAXN]; /// mp[i][j] i<--> j is connected. -int n;/// n is the number of max Point . +int n,m;/// n is the number of max Point . int path[MAXN]; void spfa(int StartPoint) /// d[i] is the min distance from StartPoint to i ( Both >=1 ) { - memset(d,0x3f,sizeof(int)*(n+1)); - memset(v,0,sizeof(int)*(n+1)); - /* - for(int i=1;i0) { int c=q[--cnt]; - v[c]=0; + //v[c]=0; for(int i=0;i<=n;i++) { /// Here : if your mp[i][j] use INF as infinite, then use mp[c][i]!=INF. /// Or you may use mp[i][j]!=-1 && d[i] > d[c] + mp[c][i] - if( mp[c][i]!=INF && d[i]>d[c]+mp[c][i] ) + if( d[i]>d[c]+mp[c][i] ) { d[i]=d[c]+mp[c][i]; //path[i]=min(path[i],path[c]); if(!v[i]) { if(c) path[i]=path[c]; - v[i]=1,q[cnt++]=i; + v[i]==1; + q[cnt++]=i; } } - if(c&&d[i]==d[c]+mp[c][i]) + if(d[i]==d[c]+mp[c][i]) { - path[i]=min(path[i],path[c]); + if(c)path[i]=min(path[i],path[c]); } } } @@ -59,29 +61,23 @@ int main() scanf("%d",&t); while(t--) { - int m; - scanf("%d %d",&n,&m); + scanf("%d%d",&n,&m); if(!n&&!m) break; n=n+1; - for(int i=0;i<=n;i++) + for(int i=0;i<=n;++i) { - for(int j=0;j<=n;j++) + for(int j=0;j<=i;++j) { if(i==j) mp[i][j]=0; - else mp[i][j]=INF; + else mp[i][j]=mp[j][i]=INF; } } + int tu,tv,tw; for(int i=0;i