黑白棋遊戲
time limit:10000ms memory limit:65536k
total submit:9 accepted:5
case time limit:1000ms
description
【問題描述】
黑白棋遊戲的棋盤由4×4方格陣列構成。棋盤的每一方格中放有1枚棋子,共有8枚白棋子和8枚黑棋子。這16枚棋子的每一種放置方案都構成乙個遊戲狀態。在棋盤上擁有1條公共邊的2個方格稱為相鄰方格。乙個方格最多可有4個相鄰方格。在玩黑白棋遊戲時,每一步可將任何2個相鄰方格中棋子互換位置。對於給定的初始遊戲狀態和目標遊戲狀態,程式設計計算從初始遊戲狀態變化到目標遊戲狀態的最短著棋序列。
【輸入】
輸入檔案共有8行。前四行是初始遊戲狀態,後四行是目標遊戲狀態。每行4個數分別表示該行放置的棋子顏色。「0」表示白棋;「1」表示黑棋。
【輸出】
輸出檔案的第一行是著棋步數n。接下來n行,每行4個數分別表示該步交換棋子的兩個相鄰方格的位置。例如,abcd表示將棋盤上(a,b)處的棋子與(c,d)處的棋子換位。
input
1111
0000
1110
0010
1010
0101
1010
0101
output
4 1222
1424
3242
4344
水題。。直接bfs
下面是ac**:
#include#include#includeusing namespace std;
const int maxn = 5;
char s_pos[maxn][maxn];
char e_pos[maxn][maxn];
int n;
bool vis[140000];
int dx= ;
int dy= ;
struct node
start,ans;
bool cheack(int x,int y)
bool equal(char m[maxn][maxn])
int hash(char m[maxn][maxn])
return res;
}void bfs()
//printf("4344\n");
for(int i=0; i<4; i++) for(int j=0; j<4; j++)
for(int k=0; k<4; k++)
t=hash(next.m);
if(!vis[t])}}
}}int main()
{ for(int i=0; i<4; i++) scanf("%s",s_pos[i]);
for(int i=0; i<4; i++) scanf("%s",e_pos[i]);
for(int i=0; i<4; i++) for(int j=0; j<4; j++)
start.m[i][j]=s_pos[i][j];
start.step=0;
bfs();
printf("%d\n",ans.step);
for(int i=0; i
黑白棋遊戲
用c 封裝了一下,只完成了乙個雛形,有很多功能沒有新增上,但 的行數已經縮短了很多了。include include include includeusing namespace std class chess int counter 計數器,計算棋子個數 const friend void dra...
黑白棋遊戲
include include using namespace std char e 30 30 int a 30 30 int c 30 int x 30 int y 30 intf int n,int sum int pos sum 2 n int cnt 0 int flag 0 int w ...
黑白棋遊戲程式
include include include include include include using namespace std int qi 8 8 define size 8 void display char board size return no of moves void make...