求助各位,只有第二个点错了,我的矛盾出现靠后了一行,不知道为啥捏
  • 板块P1347 排序
  • 楼主z21371173
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/6/12 20:25
  • 上次更新2023/10/27 23:25:02
查看原帖
求助各位,只有第二个点错了,我的矛盾出现靠后了一行,不知道为啥捏
692458
z21371173楼主2022/6/12 20:25
#include<stdio.h>
int arr[30][30];//arr[i][j],which can be get i
int top[30];
int edge[30][30];
int get[30];//q can get
char res[30];
int len,n,m;
int visit[30];
///
int print(int i,int l) {
	visit[i]=1;
	res[l]=i+'A';
	if(l==n-1) {
		return 1;
	}
	int k,t;
	for(k=0; k<30; k++) {
		if(visit[k]==0&&edge[i][k]==1) {
			t=print(k,l+1);
			if(t==1) {
				return 1;
			}
		}
	}
	visit[i]=0;
	return 0;
}
int main() {
	int i,j,k,p,q,t;
	char str[5];
	scanf("%d%d",&n,&m);
	for(i=1; i<=m; i++) {
		scanf("%s",str);
		j=str[0]-'A';
		k=str[2]-'A';
		edge[j][k]=1;
		if(edge[k][j]==1) {
			printf("Inconsistency found after %d relations.",i);
			return 0;
		}
		get[j]++;
		if(get[j]>=n-1) {
			t=print(j,0);
			if(t==1) {
				printf("Sorted sequence determined after %d relations: ",i);
				printf("%s.",res);
				return 0;
			}
		}
		arr[k][top[k]++]=j;
		for(p=0; p<top[j]; p++) {
			q=arr[j][p];
			if(edge[k][q]==1) {
				printf("Inconsistency found after %d relations.",i);
				return 0;
			}
			if(edge[q][k]==0) {
				arr[k][top[k]++]=q;
				edge[q][k]=1;
				get[q]++;
				if(get[q]>=n-1) {
					k=print(q,0);
					if(k==1) {
						printf("Sorted sequence determined after %d relations: ",i);
						printf("%s.",res);
						return 0;
					}
				}
			}
		}
		for(t=0; t<26; t++) {
			if(get[t]>=n-1) {
				k=print(t,0);
				if(k==1) {
					printf("Sorted sequence determined after %d relations: ",i);
					printf("%s.",res);
					return 0;
				}
			}
		}
		for(t=0; t<=26; t++) {
			for(k=t+1; k<=26; k++) {
				if(edge[t][k]+edge[k][t]>2) {
					printf("Inconsistency found after %d relations.",i);
					return 0;
				}
			}
		}
	}
	printf("Sorted sequence cannot be determined.");
	return 0;
}
2022/6/12 20:25
加载中...