社区讨论
关于拓扑
学术版参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mi869u9q
- 此快照首次捕获于
- 2025/11/21 09:19 4 个月前
- 此快照最后确认于
- 2025/11/21 09:19 4 个月前
求助巨佬
CPP//'a'=97
#include<string>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=110;
queue<int>q;
struct Edge{
int to,last;
char nb;
}edge[maxn],ie;
bool zero[maxn];
int first[30],in[30];
char dis[30];
string s[maxn],wait;
char x,y,z;
int n,i,m,a,begin,end,now=1,k;
void van(int from,int to,int t)
{
z=s[from][t];
begin=from;
for(i=from+1;i<=to;i++)
{
if(z!=s[i][t]&&s[i][t]!=0&&zero[i])
{
end=i-1;
edge[now].nb=z;
edge[now].to=(int)(s[i][t]-96);
if(s[i][t+1]='\0') zero[i]=false;
in[(int)(s[i][t]-96)]++;
edge[now].last=first[(int)(z-96)];
first[(int)(z-96)]=now;
now++;
van(begin,end,t+1);
begin=end+1;
z=s[i][t];
}
}
}
void input()
{
scanf("%d",&n);
for(i=1;i<=n;i++)
{
cin>>s[i];
}
cin>>wait;
}
void tsort()
{
for(i=1;i<=26;i++)
{
if(in[i]==0)
{
q.push(i);
in[i]=-1;
}
}
k=0;
while(!q.empty())
{
k++;
m=q.front();
dis[m]=(char)(k+96);
q.pop();
ie=edge[first[m]];
if(first[m]!=-1)
{
while(1)
{
in[ie.to]--;
if(in[ie.to]==0)
{
q.push(ie.to);
in[ie.to]=-1;
}
a=ie.last;
if(a==-1) break;
ie=edge[a];
}
}
}
}
int main()
{
memset(dis,-1,sizeof(dis));
memset(in,-1,sizeof(in));
memset(first,-1,sizeof(first));
memset(zero,true,sizeof(zero));
input();
van(1,n,0);
tsort();
for(i=0;i<sizeof(wait);i++)
printf("%c ",dis[(int)(wait[i]-96)]);
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...