[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2004年予選>14問目

14問目(あみだくじ)

問題

下図のようなあみだくじがあります。縦線5本、横線4本です。横線は縦線をまたいでも良い物とします。

あみだくじ図

上の図の横線情報を

1,2

のようにカンマ区切りで表す。この情報を元にして、1,2,3,4...がどのような順番になるのかを出力するプログラムを作成する。なお、入力データはカレントフォルダの014.datに入っているものとする。

入力


縦線の本数 w (整数 : w≦30)
横線の本数 n (整数 : n≦30)
横棒リスト a1,b1 (整数 : 半角カンマ区切り)
横棒リスト a2,b2 (整数 : 半角カンマ区切り)
...
...
横棒リスト an,bn (整数 : 半角カンマ区切り)

出力

左から
1番目の棒に来る数字
2番目の棒に来る数字
...
...
n番目の棒に来る数字

入力例


5
4
1,2
3,5
2,4
1,4

出力例


1
4
5
2
3

解き方例

素直にたどります。

ソースコード

お持ち帰り

C/C++

#include <stdio.h>

int main(){
    int w,n,i,nowLine;

    struct{
        int a,b;
    }list[30];
    FILE *fp;

    fp=fopen("014.dat","r");

    fscanf(fp,"%d\n%d\n",&w,&n);
    for(i=0;i<n;i++){
        fscanf(fp,"%d,%d\n",&(list[i].a),&(list[i].b));
    }

    for(i=1;i<=w;i++){
        int j;
        nowLine = i;

        //逆からたどる
        for(j=n-1;j>=0;j--){
            //線をわたる
            if(list[j].a == nowLine){
                nowLine = list[j].b;
            }else if(list[j].b == nowLine){
                nowLine = list[j].a;
            }
        }
        printf("%d\n",nowLine);
    }

    return 0;
}

その他

この問題はただの処理問題なので、パパっと作ってしまいましょう。C言語では構造体を使っていますが、独立した変数でも構いません。むしろその方が素早くソースコードを書くことが出来ると思います。そのようなソースコードの書き方にもなれておく必要があるでしょう。


ページの一番上へ
前のページへ 一覧に戻る 次のページへ
初版2006-5-14
[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2004年予選>14問目