有乙個6*6的棋盤,每個棋盤上都有乙個數值,現在又乙個起始位置和終止位置,請找出乙個從起始位置到終止位置代價最小的路徑: 1、只能沿上下左右四個方向移動 2、總代價是沒走一步的代價之和 3、每步(從a,b到c,d)的代價是c,d上的值與其在a,b上的狀態的乘積 4、初始狀態為1 每走一步,狀態按如下公式變化:(走這步的代價%4)+1。
果然nk就可以為所欲為,感覺dfs太耗時可能過不了,結果也是過了,ծㅂծ,,這道題的代價有點啟發式,導致雖然知道始末位置但是不能雙向bfs。這個啟發式的思想導致了使用最短路的演算法特別是迪傑斯特拉容易陷入誤區,因為最短路演算法是按照路徑最短来向外擴充套件的,但是這道題裡有著狀態的限制,貪心的選擇當前路徑最短的值有可能使得結果不是最優。所以還是怪怪的列舉狀態吧
先放乙個spfa wa的**「
ll m[max]
[max]
, vis[max]
[max]
, dist[max]
[max]
, state[max]
[max]
;ll dx[4]
=, dy[4]
=;ll sx, sy, tx, ty;
struct p };
bool
check
(ll x, ll y)
ll bfs()
}}}return dist[tx]
[ty];}
intmain()
底下是ac的dfs
ll m[max]
[max]
, vis[max]
[max]
, res = inf;
ll dx[4]
=, dy[4]
=;ll sx, sy, tx, ty;
struct p };
bool
check
(ll x, ll y)
void
dfs(ll x, ll y, ll cost, ll state)
for(
int i =
0; i <
4; i++)}
return;}
intmain()
牛客網考研復試題 棋盤遊戲
有乙個6 6的棋盤,每個棋盤上都有乙個數值,現在又乙個起始位置和終止位置,請找出乙個從起始位置到終止位置代價最小的路徑 1 只能沿上下左右四個方向移動 2 總代價是沒走一步的代價之和 3 每步 從a,b到c,d 的代價是c,d上的值與其在a,b上的狀態的乘積 4 初始狀態為1 每走一步,狀態按如下公...
牛客網 趕上那頭牛 bfs
題目大意 思路 開始想的dfs發現複雜度很高,並且會重複訪問乙個位置,這種最少步數的適合bfs,o n 的複雜度。訪問的點不能再訪問。include define ll long long using namespace std int vis 200010 intok pair int,int n...
牛客網 猜數遊戲
牛牛和羊羊在玩乙個有趣的猜數遊戲。在這個遊戲中,牛牛玩家選擇乙個正整數,羊羊根據已給的提示猜這個數字。第i個提示是 y 或者 n 表示牛牛選擇的數是否是i的倍數。例如,如果提示是 yynyy 它表示這個數使1,2,4,5的倍數,但不是3的倍數。注意到一些提示會出現錯誤。例如 提示 nyyy 是錯誤的...