diff --git a/HDOJ/2680.cpp b/HDOJ/2680.cpp new file mode 100644 index 0000000..b342940 --- /dev/null +++ b/HDOJ/2680.cpp @@ -0,0 +1,84 @@ +#include +#include +#include +#include +using namespace std; +#define MAXN 1000 +#define INF 0x3f3f3f3f +int mp[MAXN][MAXN]; +int dis[MAXN]; +bool vis[MAXN]; +int n,m,s; +void dij(int from) +{ + for(int i=1;i<=n;i++) + { + vis[i]=false; + dis[i]=mp[from][i]; + } + vis[from]=1; + for(int i=2;i<=n;i++) + { + int next=i; + int minnext=INF; + for(int j=1;j<=n;j++) + { + if(!vis[j]&&minnext>dis[j]) + { + next=j; + minnext=dis[j]; + } + } + vis[next]=true; + for(int j=1;j<=n;j++) + { + if(!vis[j]&&dis[j]>dis[next]+mp[next][j]) + { + dis[j]=dis[next]+mp[next][j]; + } + } + } +// queue bus; +// bus.push(from); +// dis[from]=0; +// while(!bus.empty()) +// { +// int pos=bus.front(); +// bus.pop(); +// vis[pos]=true; +// for(int i=1;i<=n;i++) +// { +// if(mp[pos][i]!=INF&&!vis[i]) +// { +// dis[i]=min(dis[i],dis[pos]+mp[pos][i]); +// bus.push(i); +// } +// } +// } +} +int main() +{ + while(scanf("%d %d %d",&n,&m,&s)==3) + { + memset(mp,0x3f,sizeof(int)*MAXN*MAXN); + for(int i=0; iw) mp[v][u]=w; + } + dij(s); + int w; + scanf("%d",&w); + int mindis=INF; + for(int i=0;i