标签:os io for ar amp size ef ios
由于最后一个被发展的城市一定是入度最大的,那么把入度最大的当成最后一个,同理,入度第二的当成倒数第二个。
然后判断当前点能否2步之内走到所有剩下的点即可,这里反向建图比较好处理。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<queue>
#include<vector>
#include<string>
#define eps 1e-12
#define INF 0x7fffffff
#define maxn 22222
using namespace std;
vector<int> mp[555];
vector<int> fmp[555];
char a[555];
struct node
{
int in,id;
bool operator <(const node &x)const
{
return in>x.in;
}
}t[555];
int cnt[555];
bool vis[555];
void dfs(int now,int dep)
{
vis[now]=1;
if(dep==2) return ;
for(int i=0;i<fmp[now].size();i++)
{
if(!vis[fmp[now][i]])
{
dfs(fmp[now][i],dep+1);
}
}
}
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
memset(cnt,0,sizeof(cnt));
for(int i=1;i<=n;i++) fmp[i].clear();
for(int i=1;i<=n;i++)
{
scanf("%s",a+1);
for(int j=1;j<=n;j++)
{
if(a[j]=='1') fmp[j].push_back(i),cnt[j]++;
}
}
for(int i=1;i<=n;i++)
{
t[i].id=i;
t[i].in=cnt[i];
}
sort(t+1,t+1+n);
int flag=1;
for(int i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
dfs(t[i].id,0);
for(int j=i+1;j<=n;j++)
{
if(vis[j]==0)
{
flag=1;
break;
}
}
}
if(flag)
{
for(int i=n;i>=1;i--)
{
if(i!=n) putchar(' ');
printf("%d",t[i].id);
}
puts("");
}
else puts("-1");
}
return 0;
}
标签:os io for ar amp size ef ios
原文地址:http://blog.csdn.net/t1019256391/article/details/38563417