題目鏈結
題目描述
小明忘記了旅行箱上的密碼,現在他想自己暴力弄出密碼來,但他又想知道最從乙個數字到另乙個數字最少需要多少步,現在請你幫忙。
另外,小明的密碼箱很奇怪,只有四位數,上面的數字只有1到9,每次只能讓每位數加1或者減1。按常識我們可以知道從1到9只需要減1,從9到1只需要加1。此外,你還能交換相鄰的兩個數字。如1234可以在一步後變成2134,但不能變成4231。
輸入 第一行有乙個整數:t,代表有多少組測試資料。
接下來t行,每行有兩個整數(都是四位數),第乙個是初狀態,第二個是目標狀態。
輸出 每組資料輸出乙個整數,佔一行。
樣例輸入
2 1234 2144
1111 9999
樣例輸出
2 4
解題思路:
1、求解最優解問題使用bfs進行處理,總共有11種狀態變化。
2、判重:每乙個狀態有唯一對應的數(完美雜湊)
#include
#include
#include
#include
#include
#define error 0
#define ture 1
using
namespace
std;
struct state
;state star;
int goal[4];
queue
q;const
int maxsize=1e5;
int vis[maxsize];
int judge(int a[4])
int bfs()
}for(int i=0;i<4;i++)
}for(int i=0;i<3;i++)}}
return -1;
}int main()
}
題解 bfs之密碼鎖
題目描述 瑪雅人有一種密碼,如果字串 現連續的2012四個數字就能解開密碼。給乙個長度為n的字串,2 輸入 第一行輸入n,第二行輸入n個數字,只包含0,1,2 輸出樣例輸入 502120 502120 樣例輸出11 每次交換一對,判斷,進棧 include include include inclu...
搜尋 問題 D 神奇密碼鎖
這道題個人認為隱含著狀態轉換,所以想到的還是bfs,將其中一位數加一或減一或交換臨近兩位,進入下一狀態,使用乙個大小為10000的bool陣列判重,由於bfs的特性,得到的一定是最小步數 普通bfs 如下 include include include include using namespace...
計蒜客 密碼鎖 bfs
題目描述 現在乙個緊急的任務是開啟乙個密碼鎖。密碼由四位數字組成,每個數字從1到9進行編號。每次可以對任何一位數字加1或減1.當將9加1時,數字變為1,當1減1時,數字變為9.還可以交換相鄰的數字,每乙個行動記做一步。求最少步驟開啟密碼鎖。輸入格式 第一行輸入四位數字,表示密碼鎖的初始狀態 第二行輸...