AcWing1107 模板(bfs最小步數模型)

2021-10-08 23:43:28 字數 1701 閱讀 7513

題目:

rubik 先生在發明了風靡全球的魔方之後,又發明了它的二維版本——魔板。

這是一張有 8 個大小相同的格仔的魔板:

1 2 3 4

8 7 6 5

我們知道魔板的每乙個方格都有一種顏色。

這 8 種顏色用前 8 個正整數來表示。

可以用顏色的序列來表示一種魔板狀態,規定從魔板的左上角開始,沿順時針方向依次取出整數,構成乙個顏色序列。

對於上圖的魔板狀態,我們用序列 (1,2,3,4,5,6,7,8)來表示,這是基本狀態。

這裡提供三種基本操作,分別用大寫字母 a,b,c 來表示(可以通過這些操作改變魔板的狀態):

a:交換上下兩行;

b:將最右邊的一列插入到最左邊;

c:魔板**對的4個數作順時針旋轉。

下面是對基本狀態進行操作的示範:

a:

8 7 6 5

1 2 3 4

b:

4 1 2 3

5 8 7 6

c:

1 7 2 4

8 6 3 5

對於每種可能的狀態,這三種基本操作都可以使用。

你要程式設計計算用最少的基本操作完成基本狀態到特殊狀態的轉換,輸出基本操作序列。

注意:資料保證一定有解。

輸入格式

輸入僅一行,包括 8 個整數,用空格分開,表示目標狀態。

輸出格式

輸出檔案的第一行包括乙個整數,表示最短操作序列的長度。

如果操作序列的長度大於0,則在第二行輸出字典序最小的操作序列。

資料範圍

輸入資料中的所有數字均為 1 到 8 之間的整數。

輸入樣例:

2 6 8 4 5 7 3 1
輸出樣例:

7

bcabccb

一道裸的bfs 

#includeusing namespace std;

#define ll long long

#define rep(i,a,b) for(int i=a;i<=b;i++)

#define per(i,b,a) for(int i=b;i>=a;i--)

queueq;

string start,end1;

unordered_mapdis;

unordered_map>pre;

string get1(string s)

string get2(string s)

string get3(string s)

int bfs() ;

if(s[i] == end1) return dis[s[i]];

q.push(s[i]);}}

}void write(pairp)

write(pre[p.first]);

cout << p.second;

}int main()

rep(i,1,8) start += char(i + '0');

int len = bfs();

cout << len << endl;

if(len)

return 0;

}

AcWing1107 魔板 利用bfs

rubik 先生在發明了風靡全球的魔方之後,又發明了它的二維版本 魔板。這是一張有 8 個大小相同的格仔的魔板 1 2 3 4 8 7 6 5 我們知道魔板的每乙個方格都有一種顏色。這 8 種顏色用前 8 個正整數來表示。可以用顏色的序列來表示一種魔板狀態,規定從魔板的左上角開始,沿順時針方向依次取...

AcWing 173 矩陣距離 多源bfs模板

acwing 173.矩陣距離 給定乙個n行m列的01矩陣a,a i j 與 a k l 之間的曼哈頓距離定義為 d is t a i j a k l i k j l dist a i j a k l i k j l dist a i j a k l i k j l 輸出乙個n行m列的整數矩陣b,其...

BFS模板 A計畫

time limit 1000ms memory limit 32768kb 64bit io format i64d i64u submit status practice hdu 2102 description 可憐的公主在一次次被魔王擄走一次次被騎士們救回來之後,而今,不幸的她再一次面臨生命...