UVA-227 Puzzle(模擬)
阿新 • • 發佈:2018-11-20
題目:
題意:
給出一個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; aView Code= 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. */