[UVA227][ACMICPC WF 1993]Puzzle (恶心模拟)

mac2022-06-30  18

各位大佬都好厉害……

这个ACM/ICPC1993总决赛算黄题%%%

我个人认为至少要绿题。

虽然算法上面不是要求很大

但是操作模拟是真的恶心……

主要是输入输出的难。

对于ABLR只需要模拟即可

遇到非法指令退出

(输入输出真的很麻烦啊!!)

贴代码

#include<bits/stdc++.h> #define MAXN 5 using namespace std; char grid[MAXN][MAXN]; int blankrow, blankcol, nextrow, nextcol; int move(char move) { if(move == 'A') { nextrow = blankrow - 1; nextcol = blankcol; } else if(move == 'B') { nextrow = blankrow + 1; nextcol = blankcol; } else if(move == 'L') { nextrow = blankrow; nextcol = blankcol - 1; } else if(move == 'R') { nextrow = blankrow; nextcol = blankcol + 1; } else return 1; if(nextrow >= 0 && nextrow < MAXN && nextcol >= 0 && nextcol < MAXN) { grid[blankrow][blankcol] = grid[nextrow][nextcol]; grid[nextrow][nextcol] = ' '; blankrow = nextrow; blankcol = nextcol; return 0; } else return 1; } int main(void) { int caseno=0, okflag, i, j; char c; while((c=getchar()) != 'Z') { for(i=0; i<MAXN; i++) for(j=0; j<MAXN; j++) { grid[i][j] = c; if(c == ' ' || c == '\n') { blankrow = i; blankcol = j; grid[i][j] = ' '; } c = getchar(); if(j == MAXN-1 && c == '\n') c = getchar(); } okflag = 1; while(c != '0') { if(c != '\n') { if(move(c)){ okflag = 0; break; } } c = getchar(); if(c == '\n') c = getchar(); } while(c != '0') c = getchar(); while(c != '\n') c = getchar(); if(++caseno > 1) printf("\n"); printf("Puzzle #%d:\n", caseno); if(okflag) { for(i=0; i<MAXN; i++) printf("%c %c %c %c %c\n", grid[i][0], grid[i][1], grid[i][2], grid[i][3], grid[i][4]); } else printf("This puzzle has no final configuration.\n"); } return 0; }

 

转载于:https://www.cnblogs.com/lincold/p/9832589.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)