神奇密碼鎖(BFS)

2021-08-04 10:40:37 字數 966 閱讀 8541

題目鏈結

題目描述

小明忘記了旅行箱上的密碼,現在他想自己暴力弄出密碼來,但他又想知道最從乙個數字到另乙個數字最少需要多少步,現在請你幫忙。

另外,小明的密碼箱很奇怪,只有四位數,上面的數字只有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.還可以交換相鄰的數字,每乙個行動記做一步。求最少步驟開啟密碼鎖。輸入格式 第一行輸入四位數字,表示密碼鎖的初始狀態 第二行輸...