这道题写的不好,很多错误,最后代码也不够好……
题意就是求是否排序是否完全而且正确,可能会出现矛盾(也就是环)或者依然有字母不能确定,但是如果在前几次能够排完的话以后的输入就不需要判断了
代码在这:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int nmb[26];
int map[26][26];
int p[26];
int sorted(int n)
{
int m,flag=2,loc,tmp[26],k=0;
for(int i=0;i<n;++i)
{
tmp[i]=nmb[i]; //入度
}
for(int i=0;i<n;++i)
{
m=0;
for(int j=0;j<n;++j) if(tmp[j]==0) {m++;loc=j;}
if(m==0) return 0; //有环
if(m>1) flag=1; //无序
p[k++]=loc;
tmp[loc]=-1;
for(int j=0;j<n;++j)
if(map[loc][j]==1) tmp[j]--;
}
return flag;
}
int main() {
int n,m;
int x,y;
char s[5];
while(scanf("%d%d",&n,&m)&&n!=0&&m!=0)
{
getchar();
int FLAG=0;
memset(map,0,sizeof(map));
memset(nmb,0,sizeof(nmb));
memset(p,0,sizeof(p));
for(int i=0;i<m;++i){
fgets(s,5,stdin);
if(FLAG) continue;
int len=strlen(s);
s[--len]='\0';
x=s[0]-'A';
y=s[2]-'A';
map[x][y]=1;
nmb[y]++;
int X=sorted(n);
if(X==0) {printf("Inconsistency found after %d relations.\n",i+1);FLAG=1;}
else if(X==2) {
printf("Sorted sequence determined after %d relations: ",i+1);
for(int j=0;j<n;++j)
printf("%c",p[j]+'A');
printf(".\n");
FLAG=1;
}
}
if(!FLAG) printf("Sorted sequence cannot be determined.\n");
}
return 0;
}
本文介绍了一个用于检查排序算法一致性的程序实现。通过构建图结构来分析输入数据中字母间的排序关系,判断是否存在环路或无法确定的排序情况,并提供排序结果。
1072

被折叠的 条评论
为什么被折叠?



