Listing: CUNOSTINTE.CPP #include <stdio.h> #include <stdlib.h> int m,n,a[51][51],b[50][50],nr[50],sol[50], ut[50]; void lecture(void){ int x,y; FILE *f=fopen("INPUT.TXT","rt"); fscanf(f,"%d%d",&n,&m); for (int i=0;i<m;i++){ fscanf(f,"%d%d",&x,&y); a[x-1][y-1]=a[y-1][x-1]=1; b[x-1][nr[x-1]++]=y-1; b[y-1][nr[y-1]++]=x-1; } for (i=0;i<n;i++) sol[i]=-1; } int possible(int k){ if (ut[k]) return 0; for (int i=0;i<nr[k]-1;i++) for (int j=i+1;j<nr[k];j++) if (!a[b[k][i]][b[k][j]]) return 0; return 1; } void ajoute(int x,int y){ ut[y]=1; sol[x]=y; nr[y]=0; for (int i=0;i<n;i++) a[i][y]=a[y][i]=0; for (i=0;i<n;i++) for (int j=0;j<nr[i];j++) if (b[i][j]==y) b[i][j]=b[i][(nr[i]--)-1]; } void pas_de_solution(void){ FILE *f=fopen("OUTPUT.TXT","wt"); fprintf(f,"NO\n"); fclose(f); exit(1); } void determination(void){ for (int i=0;i<n;i++){ for (int j=0;j<n;j++) if (possible(j)){ajoute(i,j); break;} if (sol[i]==-1) pas_de_solution(); } } void solution(void){ FILE *f=fopen("OUTPUT.TXT","wt"); fprintf(f,"YES\n%d",sol[0]+1); for (int i=1;i<n;i++) fprintf(f," %d",sol[i]+1); fclose(f); } void main(void){ lecture(); determination(); solution(); } [cuprins] |