UVa 227 Puzzle

2160 ワード

この問題は実験の8 numberに似ているが,数字ではなく文字にすぎない.
%c吃回车...そしてgetchar()を追加しました.
当時の考えを思い出した
アルファベットを入力するたびに境界を越えたかどうかをチェックし、なければ交換し、スペースの位置を更新します.
しかし、これは移動すると限界を越えて「ああ、これは最終的な結果がない」と出力されます.
この論理はよく知っているのではないでしょうか.
そう、思い切ってbreak
そして果てしないデバッグ
最後にbreakに気づいた後のアルファベットも次のグループの入力として
真実を知る私の涙
変更して、サンプルを過ぎてWAを続けます
問題をよく見て問題をよく見る
うん、UVaのPE判定を突っ込み続けた
#include<stdio.h>
#include<algorithm>
using namespace std;
char a[6][6];
int main(){
    int t=0;
    bool flag=true;
    while(++t && ~scanf("%c",&a[0][0]) && a[0][0]!='Z'){

        int h,l,hdo,ldo;
        for(int i=0;i<5;i++){
            for(int j=0;j<6;j++){
                if(i||j)
                    scanf("%c",&a[i][j]);
                if(a[i][j]==' ')
                    h=i,l=j;
            }
        }
        char dong;
        hdo=h;
        ldo=l;
        bool p=true;
        while(~scanf("%c",&dong) && dong!='0'){
            if(dong=='
') continue; switch(dong){ case 'A': hdo--; break; case 'B': hdo++; break; case 'L': ldo--; break; case 'R': ldo++; break; } if(5<=ldo || ldo<0 || 5<=hdo || hdo<0){ hdo=h; ldo=l; p=false; } swap(a[h][l],a[hdo][ldo]); h=hdo,l=ldo; } if(t!=1) printf("
"); printf("Puzzle #%d:
",t); if(p){ for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ printf("%c",a[i][j]); if(j<4) printf(" "); } printf("
"); } } else printf("This puzzle has no final configuration.
"); getchar(); } return 0; }