問題描述
如下面第乙個圖的九宮格中,放著 1~8 的數字卡片,還有乙個格仔空著。與空格子相鄰的格仔中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。
我們把第乙個圖的局面記為:12345678.
把第二個圖的局面記為:123.46758
顯然是按從上到下,從左到右的順序記錄數字,空格記為句點。
本題目的任務是已知九宮的初態和終態,求最少經過多少步的移動可以到達。如果無論多少步都無法到達,則輸出-1。
輸入格式
輸入第一行包含九宮的初態,第二行包含九宮的終態。
輸出格式
輸出最少的步數,如果不存在方案,則輸出-1。
樣例輸入
12345678.
123.46758
樣例輸出
3樣例輸入
13524678.
46758123.
樣例輸出
22
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8#define n 20005
9using
namespace
std;
1011
char mp[3][3], gp[3][3
];12
int dir[4][2] = ;
13char str[10
];14
struct
node
20 node(int x, int y, int
step)
25};
26set
st;27 queueq;
28bool
check(node cur)
3536
intcal(node cur)
4546
void
bfs()
5758
for(int i=0; i<4; ++i)72}
73 cout<
<
7576
intmain()
86 node cur = node(bx, by, 0
);87 memcpy(cur.cur_mp, mp, sizeof
(mp));
88q.push(cur);
89 cin>>str;
90 len = 0;91
for(int i=0; i<3; ++i)
92for(int j=0; j<3; ++j)
93 gp[i][j] = str[len++];
94bfs();95}
96return0;
97 }
藍橋杯 歷屆試題 九宮重排
問題描述 如下面第乙個圖的九宮格中,放著 1 8 的數字卡片,還有乙個格仔空著。與空格子相鄰的格仔中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。我們把第乙個圖的局面記為 12345678.把第二個圖的局面記為 123.46758 顯然是按從上到下,從左到右的順序記錄數字,空格...
藍橋杯 歷屆試題 九宮重排
問題描述 如下面第乙個圖的九宮格中,放著 1 8 的數字卡片,還有乙個格仔空著。與空格子相鄰的格仔中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。我們把第乙個圖的局面記為 12345678.把第二個圖的局面記為 123.46758 顯然是按從上到下,從左到右的順序記錄數字,空格...
藍橋杯 歷屆試題 九宮重排
bfs 查重 因為通過不同的路徑到達同乙個點會產生不同的串,不具有唯一性,所以查重不再是查詢乙個點到沒到過,而是找乙個中間串出沒出現過,set一下就行了 include include include include include include include include include i...