有向图的多源多点问题,,,

#include<iostream> #include<algorithm> #include<cstdio> #define N 1001 #define M 111111111 using namespace std; int map[N][N]; int n; int main() { while( ~scanf("%d",&n)!=EOF&&n ) { for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) {if(i!=j) map[i][j]=M; else map[i][j]=0; } for(int i=1;i<=n;++i) { int m; ~scanf("%d",&m); if(!m) continue; for(int j=1;j<=m;++j) { int a,b; ~scanf("%d%d",&a,&b); map[i][a]=b;注意此图为单向图。。。 } } for(int k=1;k<=n;++k) for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) if(map[i][k]!=M&&map[k][j]!=M&&map[i][j]>map[i][k]+map[k][j]) map[i][j]=map[i][k]+map[k][j]; int minx=M,k=0; for(int i=1;i<=n;++i)分别以每个顶点为源点开始搜索,,,, { int max=0; bool flag=false; for(int j=1;j<=n;++j) { if(map[i][j]==M)判断该路径是不是连通。 { flag=true;break;} if(map[i][j]>max) max=map[i][j]; } if(!flag&&max<minx) minx=max,k=i; } if(!k) printf("disjoint\n"); else printf("%d %d\n",k,minx); }return 0; }

dijstra算法:

#include<iostream> #include<string.h> #define N 1001 #define M 99999999 #define FOR(i,s,t) for(int i=(s);i<=(t);++i) using namespace std; int n; int map[N][N]; int dist[N]; bool visit[N]; int main() { while(cin>>n,n) { memset(map,0,sizeof(map)); FOR(i,1,n) { int m; cin>>m; if(!m) continue; FOR(j,1,m) { int a,b; cin>>a>>b; map[i][a]=b; } } int mmin=M,mink; FOR(i,1,n) { int now=i; bool bb=true; FOR(j,1,n) { dist[j]=M; visit[j]=true; } dist[now]=0; visit[now]=false; FOR(k,1,n) { int minx=M; FOR(j,1,n) if(visit[j]&&map[now][j]&&dist[j]>dist[now]+map[now][j]) dist[j]=dist[now]+map[now][j]; FOR(j,1,n) if(visit[j]&&minx>dist[j]) minx=dist[now=j]; visit[now]=false; } int _max=0; FOR(p,1,n) if(dist[p]==M) {bb=false;break;} if(bb) { FOR(p,1,n) if(dist[p]>_max) _max=dist[p]; if(mmin>_max) mmin=_max,mink=i; } } if(mmin<M&&mmin!=0) cout<<mink<<" "<<mmin<<endl; else cout<<"disjoint"<<endl; } return 0; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值