したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

管理人の独り言(プログラミング関連)

1515 ◆adhRKFl5jU:2009/03/01(日) 18:24:55
jid8
-----
#include <stdio.h>
#define max(x,y) ((x>=y)?x:y)
#define min(x,y) ((x<=y)?x:y)
#define N 1000
#define SIZE 100

int n,xsize,ysize;
int num[SIZE][SIZE];
char order[N+1][N+1];
int invis[N+1];
int check[N+1];
int ans[N],cnt;

void saiki(int p){
int i;
for(i=1;i<=n;i++){
if(order[p][i]==1 && check[i]==0 && invis[i]==0)saiki(i);
}
check[p]=1;
ans[cnt++]=p;
}

main(){
int i,j,k,l;
int minx[N+1],maxx[N+1],miny[N+1],maxy[N+1];
scanf("%d%d%d",&n,&xsize,&ysize);
for(i=1;i<=n;i++){
minx[i]=miny[i]=9999;maxx[i]=maxy[i]=-1;
}
for(j=0;j<ysize;j++){
for(i=0;i<xsize;i++){
scanf("%d",&num[i][j]);
if(num[i][j]!=0){
int a=num[i][j];
minx[a]=min(minx[a],i);
maxx[a]=max(maxx[a],i);
miny[a]=min(miny[a],j);
maxy[a]=max(maxy[a],j);
}
}
}
for(i=1;i<=n;i++){
if(maxx[i]==-1)invis[i]=1;
}
for(k=1;k<=n;k++){
for(i=minx[k];i<=maxx[k];i++){
for(j=miny[k];j<=maxy[k];j++){
if(num[i][j]!=0 && num[i][j]!=k){
order[k][num[i][j]]=1;
order[num[i][j]][k]=-1;
}
}
}
}
/*
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
printf("%3d",order[i][j]);
}
printf("(%d-%d)x(%d-%d)\n",minx[i],maxx[i],miny[i],maxy[i]);
}
*/
for(i=1;i<=n;i++){
if(check[i]==0 && invis[i]==0){
saiki(i);
}
}
for(i=1;i<=n;i++){
if(invis[i]!=0)ans[cnt++]=i;
}
for(i=cnt-1;i>=0;i--){
printf("%d",ans[i]);
if(i==0)printf("\n");
else printf(" ");
}
}


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板