1. 程式人生 > >UVA-227 Puzzle(模擬)

UVA-227 Puzzle(模擬)

題目:

題目瀏覽傳送門

題意:

給出一個5*5的方格,裡邊有一個格子是空的,現在給出一串指令,A->空格向上移動,B->空格向下移動,R->空格向右移動,L->空格向左移動。

輸出移動後的結果。

思路:

直接上模擬就好了,不過就是輸入處理有點噁心,最好用scanf和printf來處理輸入輸出。

1、空格移動出界和出現不是‘A’、‘B’、‘R’、‘L’中的指令,這兩種情況都算是“This puzzle has no final configuration.”。

2、另外在處理指令的時候,遇到1中的情況只要標記一下就好了,最終統一在‘0’的位置退出迴圈。(WA到懷疑人生)

例如這個樣例:

AAAAA
BBBBB
NNNNN
JJJJJ
UUUU
AQ
0
Z

3、輸出兩兩之間用一個空行隔開。

程式碼:

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define FRE() freopen("in.txt","r",stdin)
using namespace std;
typedef long long ll;
const int maxn = 5e3+10;
int mp[6][6];

void toSwap(int& a,int& b){
    int t = a;
    a 
= b,b = t; } bool Move(char op, int& r,int& c) { if(op=='A') { if(r-1 == 0) return false; toSwap(mp[r][c],mp[r-1][c]); r--; return true; } else if(op=='B') { if(r+1 == 6) return false; toSwap(mp[r][c],mp[r+1][c]); r
++; return true; } else if(op == 'R') { if(c+1 == 6) return false; toSwap(mp[r][c],mp[r][c+1]); c++; return true; } else if(op == 'L'){ if(c-1 == 0) return false; toSwap(mp[r][c],mp[r][c-1]); c--; return true; } return false; } void check() { for(int i = 1; i<=5; i++) { for(int j = 1; j<=5; j++) { if(j!=1) printf(" "); printf("%c",mp[i][j]+'A'); } printf("\n"); } } int main() { //FRE(); char str[6]; int cnt = 0; while(1) { int len; for(int i = 1; i<=5; i++) { gets(str); len = strlen(str); if(i == 1 && len == 1 && str[0] == 'Z'){ return 0; } for(int j = 0; j<len; j++) { mp[i][j+1] = str[j]-'A'; } if(len == 4){ mp[i][5] = -33; } } int r,c; for(int i = 1; i<=5; i++) { for(int j = 1; j<=5; j++) { if(mp[i][j] < 0) { r = i; c = j; } } } //check(); char op[10000]; bool ok = true; while(1) { bool isend = false; gets(op); //cout<<op<<" GG "<<endl; len = strlen(op); for(int i = 0; i<len; i++) { //cout<<op[i]<<endl; if(op[i] == '0') { isend = true; } else if(!Move(op[i],r,c)){ ok = false; } } if(isend) { break; } } //cout<<"HH"<<endl; if(cnt != 0){ printf("\n"); } if(!ok){ printf("Puzzle #%d:\n",++cnt); printf("This puzzle has no final configuration.\n"); }else { printf("Puzzle #%d:\n",++cnt); check(); } } return 0; } /* PutIn: TRGSJ XDOKI M VLN WPABE UQHCF ARRBBL0 ABCDE FGHIJ KLMNO PQRS TUVWX AAA LLLL0 ABCDE FGHIJ KLMNO PQRS TUVWX AAAAABBRRRLL0 Z PutOut: Puzzle #1: T R G S J X O K L I M D V B N W P A E U Q H C F Puzzle #2: A B C D F G H I E K L M N J P Q R S O T U V W X Puzzle #3: This puzzle has no final configuration. */
View Code