[
板情報
|
カテゴリランキング
]
したらばTOP
■掲示板に戻る■
全部
1-100
最新50
|
メール
|
1-
101-
201-
301-
401-
501-
601-
701-
801-
901-
1001-
1101-
1201-
1301-
1401-
1501-
1601-
1701-
1801-
1901-
2001-
2101-
2201-
2301-
2401-
2501-
2601-
2701-
2801-
2901-
3001-
3101-
3201-
3301-
3401-
3501-
3601-
3701-
3801-
3901-
4001-
4101-
4201-
4301-
4401-
4501-
4601-
4701-
4801-
4901-
5001-
5101-
5201-
5301-
5401-
この機能を使うにはJavaScriptを有効にしてください
|
管理人の独り言(プログラミング関連)
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
(省略可)
:
※書き込む際の注意事項は
こちら
※画像アップローダーは
こちら
(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板