poj1125 暴力+dijsktra算法

来源:互联网 发布:idm网络集成被更改 编辑:程序博客网 时间:2024/05/18 20:52

不得不说自己真的是马虎的不行啦,结果让我多交了两次而且还改了好长时间。。。

#include<iostream>#include<queue>using namespace std;int a[105][105],sign[105];int dij(int m, int n){queue<int>q;int b[105],i,t;bool vis[105];for(i=1; i<=105; i++)//取得是最大的{b[i]=10000;vis[i]=false;}b[m]=0;vis[m]=true;    q.push(m);while(!q.empty())//队列不空的时候{t=q.front();q.pop();vis[t]=false;for(i=1; i<=n; i++){if(a[t][i]+b[t]<b[i]){b[i]=a[t][i]+b[t];if(vis[i]==false){q.push(i);vis[i]=true;}}}}int ma=0;for(i=1; i<=n; i++)if(b[i]>ma)ma=b[i];return ma;}int main(){int n,i,j,T;while(1){cin>>n;if(n==0)break;for(i=1; i<=n; i++)for(j=1; j<=n; j++)a[i][j]=10000;//每程序的最大的距离时INT_MAX的for(i=1; i<=n; i++){ cin>>T;while(T--){cin>>j;cin>>a[i][j];//记录的是时间的}}for(i=1; i<=n; i++){sign[i]=dij(i,n);}int ma=INT_MAX,t=0;for(i=1; i<=n; i++)if(sign[i]<ma){ma=sign[i];t=i;}if(ma==INT_MAX)cout<<"disjoint"<<endl;else    cout<<t<<" "<<ma<<endl;}return 0;}


 

原创粉丝点击