日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法提高课-搜索-最短路模型-AcWing 188. 武士风度的牛 :bfs、dist数组记录最小步数

發(fā)布時(shí)間:2025/4/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法提高课-搜索-最短路模型-AcWing 188. 武士风度的牛 :bfs、dist数组记录最小步数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目分析



來源:acwing

分析:馬走日,這里用bfs遍歷馬的行走過程,輸出到達(dá)終點(diǎn)的最小步數(shù)。

  • 使用bfs求到每個(gè)點(diǎn)的最小步數(shù),需要開一個(gè)dist[][]數(shù)組,來記錄起點(diǎn)到某點(diǎn)的最小步數(shù)。
  • 隊(duì)列里面需要判斷很多東西,容易忘記的是:已經(jīng)遍歷過的點(diǎn)直接continue,遍歷過的點(diǎn)是dist[][] != -1.
  • 當(dāng)找到終點(diǎn)時(shí),直接return dist[t.x][t.y] + 1;
  • ac代碼

    #include<bits/stdc++.h> #define x first #define y second using namespace std; const int N = 200, M = N * N; typedef pair<int,int> PII; PII q[M]; int n,m; char g[N][N]; int dist[N][N]; // 記錄最短步數(shù) int bfs(int sx, int sy){int dx[8] = {-2, -1, 1, 2, 2, 1, -1, -2};int dy[8] = {1, 2, 2, 1, -1, -2, -2, -1};memset(dist, -1, sizeof dist);int hh = 0, tt = 0;q[hh] = {sx,sy};dist[sx][sy] = 0;int cnt = 0;while( hh <= tt){PII t = q[hh ++];for(int i = 0; i < 8; i++){int a = t.x + dx[i], b = t.y+ dy[i];if( a < 0 || a >= n || b < 0 || b >= m) continue;if(g[a][b] == '*') continue;if(dist[a][b] != -1) continue;if(g[a][b] == 'H') return dist[t.x][t.y] + 1;dist[a][b] = dist[t.x][t.y] + 1;q[++ tt] = {a, b};}}return -1; }int main(){cin >> m >> n;for(int i = 0; i < n; i++) cin >> g[i];for(int i = 0; i < n; i ++)for(int j = 0; j < m; j ++)if( g[i][j] == 'K'){cout <<bfs(i, j);}}

    題目來源

    https://www.acwing.com/problem/content/190/

    總結(jié)

    以上是生活随笔為你收集整理的算法提高课-搜索-最短路模型-AcWing 188. 武士风度的牛 :bfs、dist数组记录最小步数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。