演算法 棋盤遊戲 game 解題報告

2021-07-24 10:38:37 字數 2078 閱讀 3765

棋盤遊戲(game)

源程式名       game.???  (pas,c,cpp)

可執行檔名   game.exe

輸入檔名     game.in

輸出檔名     game.out

時限           2s

在乙個4*4的棋盤上有8個黑棋和8個白棋,當且僅當兩個格仔有公共邊,這兩個格仔上的棋是相鄰的。移動棋子的規則是交換相鄰兩個棋子。現在給出乙個初始棋盤和乙個最終棋盤,要求你找出乙個最短的移動串行使初始棋盤變為最終棋盤。

klux說:「這麼簡單的題目,我都會做!」

輸入:

第1到4行每行四個數字(1或者0),描述了初始棋盤

接著是乙個空行

第6到9行每行四個數字,描述了最終棋盤

輸出:

輸出檔案的第一行是乙個整數n,表示最少的移動步數。

接下來n行每行4個數,r1,c1,r2,c2,表示移動的兩個棋子的座標(r1,c1),(r2,c2)(棋盤左上角的座標為(1,1),並且他右邊的格仔為(1,2))

如果有許多組解,你可以輸出任意一組。

樣例:

game.in:

1111

0000

1110

0010

1010

0101

1010

0101

game.out

41 2 2 2

1 4 2 4

3 2 4 2

4 3 4 4

說明:

翻譯自ceoi99-game,資料及解答由ceoi提供。

本題應該用雙向的廣度搜尋

#include

#include

using namespace std;

ifstream fin ("game.in");

ofstream fout ("game.out");

int i,j,k,s,e[10000][5],eb[10000][5],o,c1;

string a[10000],b[10000],q;

char c;

int compete1 (int i1)

int compete2 (int i1)

int check (int i1)

int check2 (int i1)

int print (int s1, int deep)

for (i=1;i<=4;i++)

e[1][1]=0;

i=1;

s=k=2;

while (a[i]!=b[i])

o=compete1 (s-1);

int k1=o;

if (o!=0)

print (s-1,0);

print2 (o);

exit (1);

}if (j<12&&a[i][j]!=a[i][j+4])

o=compete1 (s-1);

if (o!=0)

print (s-1,0);

print2 (o);

exit (1);

}if ((j+1)%4!=0&&b[i][j]!=b[i][j+1])

o=compete2 (k-1);

if (o!=0)

print (o,0);

print2 (k-1);

exit (1);

}if (j<12&&b[i][j]!=b[i][j+4])

o=compete2 (k-1);

if (o!=0)

print (o,0);

print2 (k-1);

exit (1);}}

i++;

}print (s-1,0);

return 0;

}

轉圈遊戲 解題報告

轉圈遊戲 noip2013提高組day1 time limit 1000ms memory limit 128000k description 問題描述 circle.cpp c pas n 個小夥伴 編號從 0 到 n 1 圍坐一圈玩遊戲。按照順時針方向給 n 個位置編號,從0 到 n 1。最初,...

數字遊戲 解題報告

題目鏈結 題目大意 有一圈整數 一共n個 按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到乙個數k。要求是使你所得的k最大或者最小。題目分析 1.首先對於環狀的題目首先想到的就是將環狀的轉化為線性的,這也將大大簡化我們解題的過程。我們可以將環從n和1中間斷開...

ZJOI2007 棋盤製作 解題報告

西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8 times 88 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好...