2016-9-11 CCF第四题

来源:互联网 发布:软件开发培训学费 编辑:程序博客网 时间:2024/06/06 20:01

注意:代码正确性无法保证。。。

#include <iostream>using namespace std;const int MAXNUM = 1024;const int MAXARR = 10010;int rr[MAXARR][MAXARR];void dijk(int n,int v,int *dist,int *pre){bool visit[MAXARR];int i,j;for(i=2;i<=n;i++){visit[i] = false;dist[i] = rr[v][i];if(rr[v][i]>=MAXNUM){pre[i] = 0;}else{pre[i] = v;}}pre[v] = 0;dist[v] = 0;visit[v] = true;for(i=2;i<=n;i++){int temp = MAXNUM;int u = v;for(j=1;j<=n;j++){if(!visit[j]&&dist[j]<temp){temp = dist[j];u = j;}}visit[u] = true;for(j=1;j<=n;j++){if((!visit[j])&&rr[u][j]<MAXNUM){int newdist = dist[u]+rr[u][j];if(dist[j]>=newdist){dist[j] = newdist;if(pre[j]==0){pre[j] = u;}else if(rr[pre[j]][j]>rr[u][j]){pre[j] = u;}}}}}}int main(){int a,b,c,dist[MAXARR],pre[MAXARR],n,m,i,j;while(cin>>n>>m){for(i=1;i<=n;i++){for(j=1;j<=n;j++){rr[i][j] = MAXNUM;}}for(i=0;i<m;i++){cin>>a>>b>>c;rr[a][b] = rr[b][a] = c;}int tt = 0;cout<<endl<<endl;dijk(n,1,dist,pre);for(i=1;i<=n;i++){tt+=rr[pre[i]][i];cout<<dist[i]<<endl;}cout<<tt<<endl;}return 0;}/*4 51 2 42 4 31 3 5 2 3 23 4 2*/


0 0