From 0c1c23e4005b52b080b6dc2f035cd0c2c272148e Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Wed, 12 Oct 2016 10:36:29 +0800 Subject: [PATCH] Update and rename 3562_unfinished.cpp to 3562.cpp God damn it !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --- SDUTOJ/3562.cpp | 98 ++++++++++++++++++++++++++++++++++++++ SDUTOJ/3562_unfinished.cpp | 97 ------------------------------------- 2 files changed, 98 insertions(+), 97 deletions(-) create mode 100644 SDUTOJ/3562.cpp delete mode 100644 SDUTOJ/3562_unfinished.cpp diff --git a/SDUTOJ/3562.cpp b/SDUTOJ/3562.cpp new file mode 100644 index 0000000..56510da --- /dev/null +++ b/SDUTOJ/3562.cpp @@ -0,0 +1,98 @@ +#include +#include +#include +#include +#include +using namespace std; +#define INF 0x3f3f3f3f + +/** SPFA 单源最短路径算法 不支持负环*/ +#define MAXN 1005 +int d[MAXN];/// distance [ From S to ... ] +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 path[MAXN]; + +void spfa(int StartPoint) /// d[i] is the min distance from StartPoint to i ( Both >=1 ) +{ + for(int i=0; i<=n; i++) + { + if(mp[0][i]!=INF)path[i]=i;//Path Init + d[i]=INF; + v[i]=0; + } + queue bus; + bus.push(StartPoint); + v[StartPoint]=1; + d[StartPoint]=0; + while(!bus.empty()) + { + int c=bus.front(); + bus.pop(); + //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( 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; + bus.push(i); + } + } + + if(d[i]==d[c]+mp[c][i]) + { + if(c)path[i]=min(path[i],path[c]); + } + } + } +} + +int main() +{ + int t; + scanf("%d",&t); + while(t--) + { + int m; + scanf("%d%d",&n,&m); + if(!n&&!m) break; + n=n+1; + + for(int i=0; i<=n; i++) + { + for(int j=0; j<=i; j++) + { + if(i==j) mp[i][j]=0; + else mp[i][j]=mp[j][i]=INF; + } + } + int tu,tv,tw; + for(int i=0; i -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#define mod 1000000007 -#define inf 0x3f3f3f3f -#define pi acos(-1.0) -using namespace std; -typedef long long ll; -#define RANGE 1005 -#define MAX 0x3f3f3f3f -int cost[RANGE][RANGE]; -int d[RANGE]; -bool used[RANGE]; -int n,m; -int pre[1005]; -void spfa(int s) -{ - int i,j,now; - for(i=0;i<=n+1;i++) - { - d[i]=MAX; - used[i]=false; - } - int flag=0; - for(i=0;i<=n+1;i++) - { - if(cost[0][i] q; - q.push(s); - while(!q.empty()) - { - now=q.front(); - q.pop(); - for(i=0;i<=n+1;i++) - { - if(d[i]>d[now]+cost[now][i]) - { - d[i]=d[now]+cost[now][i]; - if(used[i]==0) - { - if(now!=0)pre[i]=pre[now]; - used[i]==true; - q.push(i); - } - } - if(d[i]==d[now]+cost[now][i]) - { - if(now!=0)pre[i]=min(pre[i],pre[now]); - } - } - } -} -int main() -{ - int i,j,a,b,c; - int we; - scanf("%d",&we); - while(we--) - {scanf("%d%d",&n,&m); - if(!n&&!m) break; - for(i=0;i<=n+1;++i) - { - for(j=0;j<=i;j++) - { - if(i==j) cost[i][j]=0; - else cost[i][j]=cost[j][i]=MAX; - } - } - for(i=0;i