当前位置: 代码迷 >> 综合 >> poj 2570 Fiber Network floyd算法
  详细解决方案

poj 2570 Fiber Network floyd算法

热度:56   发布时间:2024-01-19 06:27:53.0

题意:

在一个有n个结点的图中,点a,b之间可以有属于不同公司的边,现在要查询对于点a,b,有哪些公司可以从属于本公司的边上从a到b。

思路:

对每个公司都建图,直接floyd。

代码:

//poj 2570 
//sepNINE
#include <iostream>
using namespace std;
const int maxN=210;
int g[30][maxN][maxN];
int main()
{int n;while(scanf("%d",&n)==1&&n){int a,b,i,j,k,t,x;char tmp[32];memset(g,-1,sizeof(g));while(1){scanf("%d%d",&a,&b);if(a==0)break;scanf("%s",tmp);for(i=0;tmp[i]!='\0';++i){x=tmp[i]-'a';g[x][a][b]=1;}}for(t=0;t<26;++t)for(k=1;k<=n;++k)for(i=1;i<=n;++i)for(j=1;j<=n;++j)if(g[t][i][k]!=-1&&g[t][k][j]!=-1)g[t][i][j]=1;while(1){scanf("%d%d",&a,&b);if(a==0)break;int flag=0;for(t=0;t<26;++t)if(g[t][a][b]==1){printf("%c",t+'a');flag=1;}if(flag==0)printf("-");printf("\n");}					printf("\n");					}return 0;	
} 


  相关解决方案