論久違的八數碼問題 小試牛刀(2)

2022-07-26 02:21:16 字數 1315 閱讀 4235

八數碼問題

八數碼問題也稱為九宮問題。在3×3的棋盤,擺有八個棋子,每乙個棋子上標有1至8的某一數字,不同棋子上標的數字不同樣。棋盤上另乙個空格,與空格相鄰的棋子能夠移到空格中。要求解決的問題是:給出乙個初始狀態和乙個目標狀態,找出一種從初始轉變成目標狀態的移動棋子步數最少的移動步驟。所謂問題的乙個狀態就是棋子在棋盤上的一種擺法。棋子移動後,狀態就會發生改變。解八數碼問題實際上就是找出從初始狀態到達目標狀態所經過的一系列中間過渡狀態。——摘自dalao筆記

身為乙個蒟蒻,能想到的第乙個方法就是bfs。bfs在這道題裡可謂是如魚得水,邊界清晰加上資料範圍小,直接暴力也不是不無可能,只需要判重,避免同一節點訪問多次即可。當然,判重可以有不同的方法,比如stl中的set,hash,以及簡單判重。由於stl使用簡單快捷,所以蒟蒻就寫了個set判重的函式。

#include#include

#include

#include

#include

using

namespace

std;

typedef

int state[9

];const

int maxs=1000000

;state st[maxs],goal;

intdist[maxs];

const

int dx=;

const

int dy=;

setvis;

void

lookup()

int tangguoqiang(ints)

if(vis.count(v)) return0;

vis.insert(v);

return1;

}int

hehe()

}front++;

}return0;

} int

main()

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

int ans=hehe();

if(ans>0) printf("

%d\n

",dist[ans]);

else printf("

-1\n");

return0;

}

在時間上可以用memcmp和memcpy來比較整個記憶體和複製整個記憶體,相比於迴圈複製快了許多。(函式在cstring中)。

關於第乙個函式,起到了乙個初始化的作用,便於管理;第二個函式(唐國強什麼的都是亂取名)用來判重,set裡是自動排序所以非常方便。

//由於我沒有隨手寫注釋的習慣,可能**閱讀起來有些困難,dalao和jvruo不要打我啊呀呀………………

採藥(通過0 1揹包問題小試牛刀)

description 辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫師把他帶到乙個到處都是草藥的山洞裡對他說 孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時間,每一株也有它自身的價值。我會給你一段時間...

Charles的mock技術小試牛刀

一 前言 二 介面說明 三 相關業務狀態說明 四 使用charles的map local功能mock各種response 1 mock為免費 trial的值為1,並且serviceid也為1output 2 mock為付費 trial的值為2,並且serviceid為非1output 3 mock為...

小試牛刀 簡訊驗證碼(隨機數)的生成實現

簡訊驗證碼,相信在生活中大家是幾乎天天能夠遇到。但你知道它是怎樣生成的嗎?其實它就是若干位數的隨機數組合而成。下面附上一小段程式,供大家一起學習交流。package com.fhcq.util import org.apache.commons.lang3.randomstringutils pub...