您的位置:首页 > 其它

usaco frame up(所有拓扑排序的输出)

2017-02-10 12:00 302 查看
先根据图建图再拓扑排序。

/**
ID: jinbo wu
TASK: frameup
LANG:C++
*/
#include<bits/stdc++.h>
using namespace std;
map<char,int> x1,x2,y3,y2,vis,v;
char a[35][35];
int b[35][35];
char cnt[30];
int du[35];
bool vd[50];
int n,m,l;
char ans[50];
void dfs(int num)
{
int u;
if(num==l)
{
cout<<ans<<endl;
return ;

}
for(int i=0;i<l;i++)
{
u=cnt[i];
if(!vd[u]&&!du[u])
{
for(int j=0;j<l;j++)
if(b[u][cnt[j]])
du[cnt[j]]--;
vd[u]=1;
ans[num]=u+'A';
dfs(num+1);
for(int k=0;k<l;k++)
i
4000
f(b[u][cnt[k]])
du[cnt[k]]++;
vd[u]=0;
}
}

}
int main()
{
freopen("frameup.in","r",stdin);
freopen("frameup.out","w",stdout);
cin>>n>>m;
char c;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
c=a[i][j];
if(c!='.')
{
if(!x1[c]) x1[c]=i;
else x1[c]=max(x1[c],i);
if(!x2[c]) x2[c]=i;
else x2[c]=min(x2[c],i);
if(!y3[c]) y3[c]=j;
else y3[c]=max(y3[c],j);
if(!y2[c]) y2[c]=j;
else y2[c]=min(y2[c],j);
}
if(!vis[c]&&c!='.')
{
cnt[l++]=c-'A';
vis[c]=1;
}
}
sort(cnt,cnt+l);
for(int k=0;k<l;k++)
{
c=cnt[k]+'A';
v.clear();
int t=cnt[k];
for(int i=y2[c];i<=y3[c];i++)
{
char u=a[x2[c]][i];
int f=x2[c];
if(u!=c&&!v[u]&&u!='.')
{
int d=u-'A';
b[t][d]=1;
du[d]++;
v[u]=1;
}
}
for(int i=y2[c];i<=y3[c];i++)
{
char u=a[x1[c]][i];
if(u!=c&&!v[u]&&u!='.')
{
int d=u-'A';
b[t][d]=1;
du[d]++;
v[u]=1;
}
}
for(int i=x2[c]+1;i<x1[c];i++)
{
char u=a[i][y3[c]];
if(u!=c&&!v[u]&&u!='.')
{
int d=u-'A';
b[t][d]=1;
du[d]++;
v[u]=1;
}
}
for(int i=x2[c]+1;i<x1[c];i++)
{
int f=y2[c];
char u=a[i][y2[c]];
if(u!=c&&!v[u]&&u!='.')
{
int d=u-'A';
b[t][d]=1;
du[d]++;
v[u]=1;
}
}
}
dfs(0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐