黑白棋遊戲

2021-06-09 00:26:46 字數 1672 閱讀 2238

黑白棋遊戲

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...