codeup 寬搜入門 8數碼難題 BFS

2021-10-03 10:34:50 字數 1143 閱讀 6394

初始狀態的步數就算1,哈哈

輸入:第乙個3*3的矩陣是原始狀態,第二個3*3的矩陣是目標狀態。

輸出:移動所用最少的步數

input

2 8 3

1 6 4

7 0 5

1 2 3

8 0 4

7 6 5

output

注意:題目中 0的位置是可以移動的空格。

分析:首先題目要求求最少的步數,很容易想到使用bfs ;

那麼對於bfs,我們要解決的主要問題是要確定每一步的狀態並儲存給下次使用。

結合bfs模板考慮,首先每次移動的結果是每一步的狀態,並且每次狀態我們需要儲存的資訊有:矩陣的排序,空格的位置以及步數,所以以此為依據設計結構體;

注意到,如果要設定標記陣列的話,因為每次狀態下是乙個陣列,所以是否步方便,而該題的陣列是3*3的,就算是有重複計算的狀態,時間也是可以接受的,所以這裡沒有採取標記陣列,只是簡單的處理,保證不往後走。

struct node node; 

int x[4] = ;

int y[4] = ;

int matrix[3][3], final[3][3];

bool judge(int x, int y)

bool same(int a[3][3])

}return true;

}int bfs(int x, int y)

}q.push(node);

while(!q.empty())

}int tmp;

tmp = node.m[newx][newy];

node.m[top.x][top.y] = tmp;

node.m[newx][newy] = 0;

if(same(node.m))

q.push(node);

}

}

}return -1;

}int main()}}

for(int i = 0; i < 3; i++)

}cout << bfs(x, y) << endl;

}

參考鏈結

問題 C 寬搜入門 8數碼難題

時間限制 20 sec 記憶體限制 128 mb 提交 193 解決 69 提交 狀態 討論版 命題人 外部匯入 初始狀態的步數就算1,哈哈 輸入 第乙個3 3的矩陣是原始狀態,第二個3 3的矩陣是目標狀態。輸出 移動所用最少的步數 input 2 8 3 1 6 4 7 0 5 1 2 3 8 0...

5997 Problem C 寬搜入門 8數碼難題

時間限制 20 sec 記憶體限制 128 mb 提交 85 解決 26 提交 狀態 討論版 命題人 外部匯入 初始狀態的步數就算1,哈哈 輸入 第乙個3 3的矩陣是原始狀態,第二個3 3的矩陣是目標狀態。輸出 移動所用最少的步數 input 2 8 3 1 6 4 7 0 5 1 2 3 8 0 ...

8數碼問題 深搜 廣搜

8數碼問題的廣搜在網上可以找到 廣搜一般可以找到最優解,但是深搜不一定能找到最優解。一般的深搜多是指定最大遞迴深度的深搜,一般情況下,問題解的深度很難確定。因此深蒐會出現三種情況,一是找到最優解,二是在迭代深度內找不到解,三是找到解但不是最優解。第一種情況自然是最好的,不過較經常出現的是第三種,在指...