問題 e: [藍橋杯][歷屆試題]九宮重排
時間限制: 1sec 記憶體限制: 128mb 提交: 69 解決: 17
題目描述
如下面第乙個圖的九宮格中,放著 1~8 的數字卡片,還有乙個格仔空著。與空格子相鄰的格仔中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。
我們把第乙個圖的局面記為:12345678.
把第二個圖的局面記為:123.46758
顯然是按從上到下,從左到右的順序記錄數字,空格記為句點。
本題目的任務是已知九宮的初態和終態,求最少經過多少步的移動可以到達。如果無論多少步都無法到達,則輸出-1。
輸入輸入第一行包含九宮的初態,第二行包含九宮的終態。
輸出輸出最少的步數,如果不存在方案,則輸出-1。
樣例輸入
12345678.
123.46758
樣例輸出
3
#includeusing namespace std;
string s,d;
bool vis[400000];
int fac[11];
void init()
int cantor(string a, int n)
x += fac[n - i - 1] * smaller; // 康托展開累加
}return x+1; // 康托展開值
}int ans=-1;
void bfs()
; int dy[4]=;
queueq;
string t=s;
q.push(t);
q.push("");
vis[cantor(t,9)]=1;
int depth=0;int x,y;int x2,y2;int newpos;
while(!q.empty())
if(t==d)
else
swap(t[pos-1],t[newpos-1]);}}
}}int main()
九宮格問題
include include stl 雙端佇列容器 include include pos.h using namespace std ofstream fout sudoku.txt deque d int lay deque d int checkout pos p,int n int sud...
2016 11 25 九宮格問題
題目大意 數獨規則點這裡 注意可以有格仔是空的。空的格仔用 表示。方法一.位運算 知道了這個之後,就很好辦啦。因為數字只有九個,而且不允許重複出現。直接想到位運算!表示當前數字,只需要把1向右移動當前數字位。然後設定乙個狀態變數,儲存當前有多少數字出現過。把他們相與,如果為0說明此數字還沒出現過,就...
九宮格為問題
在 射鵰英雄傳 中黃蓉曾破解九宮格,口訣 戴九履一,左三右七,二四有肩,八六為足,五居 有口訣的!一居上行正 依次斜填莫相忘,上出框時向下放,右出框時向左放,排重編在下格放,右上排重乙個樣。重排九宮 有兩種玩法 第一種是在在3 3方格盤上,是把1至8八個小木塊隨意擺放,每一空格其周圍的數字可移至空格...