解法
トポロジカルソートできないならこの問題は解が複数になり成立しません。
よってトポロジカルソートで解きます。
#include<stdio.h>
#include<string.h>
bool con[10][10];
bool spents[10];
int main(){
memset(con,false,sizeof(con));
FILE *fp;
char *fname = "pe79.txt";
int c;
for(int i=0;i<=9;i++){
spents[i]=true;
}
fp = fopen( fname, "r" );
if( fp == NULL ){
printf( "%sファイルが開けません\n", fname );
return -1;
}
char str[5];
while(fscanf(fp,"%s",str)!=EOF){
con[str[0]-'0'][str[1]-'0']=true;
con[str[0]-'0'][str[2]-'0']=true;
con[str[1]-'0'][str[2]-'0']=true;
for(int i=0;i<3;i++)spents[str[i]-'0']=false;
}
fclose(fp);
int count=0;
for(int i=0;i<10;i++){
count+=(spents[i]==false);
}
for(int i=0;i<count;i++){
for(int j=0;j<=9;j++){
if(spents[j]==false){
int bad=0;
for(int k=0;k<=9;k++){
bad+=(con[k][j]==true);
}
if(bad==0){
printf("%d",j);
spents[j]=true;
for(int k=0;k<=9;k++){
con[j][k]=false;
}
break;
}
}
}
}
}
最終更新:2014年12月12日 21:05