//poj 1388
//sep9
#include <iostream>
using namespace std;
const int MAXN=128;
char s[MAXN][MAXN];
int g[MAXN][MAXN];
int hinge[MAXN][MAXN];
int vis[MAXN];
int main()
{
int n;
while(scanf("%d",&n)==1&&n){
memset(hinge,0,sizeof(hinge));
for(int i=1;i<=n;++i)
scanf("%s",s[i]);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
g[i][j]=s[i][j-1]-'0';
for(int k=1;k<=n;++k)
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(g[i][k]&&g[k][j]){
if(g[i][j]==0||g[i][k]+g[k][j]<g[i][j])
hinge[i][j]=k,g[i][j]=g[i][k]+g[k][j];
else if(g[i][k]+g[k][j]==g[i][j])
hinge[i][j]=0;
}
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;++i)
for(int j=i+1;j<=n;++j)
vis[hinge[i][j]]=1;
int ans=0;
for(int i=1;i<=n;++i)
ans+=vis[i];
printf("%d\n",ans);
}
return 0;
}
poj 1388 Hinge Node Problem floyd算法的扩展运用
最新推荐文章于 2017-07-31 20:47:12 发布