AcWing 173. 矩陣距離

廣度優(yōu)先搜索 + 多源最短路徑

原題鏈接

感悟:這個(gè)題啊,其實(shí)可以轉(zhuǎn)換個(gè)思路,轉(zhuǎn)換成1的格子到其他0的格子的最短路徑,就基本知道是多源最短路徑的問(wèn)題。說(shuō)到多源最短路徑有個(gè)大名鼎鼎的Floyd算法,不過(guò)本題不用這么麻煩,因?yàn)樽x懂題目可知邊的權(quán)值都是1(相鄰邊)??梢灾苯佑脧V搜,等下詳細(xì)說(shuō)。還有啊,今天終于報(bào)上了心心念念的老師的算法基礎(chǔ)課,很激動(dòng),盡管自己水平不咋地,還是得加油啊?。?!

廣搜的基本框架可以看看這篇 廣搜框架

本題思路

從1格子開(kāi)始,往其他地方搜索,走一步距離加一(挺簡(jiǎn)單的,沒(méi)啥好說(shuō))

  • 利用廣搜求多源最短路徑
  • 儲(chǔ)存地圖g,狀態(tài)d,都用二維數(shù)組
  • 開(kāi)始狀態(tài):1格子的地方距離都是0;最終狀態(tài):其他地方走到,并記錄距離;
  • 二維的四個(gè)方向
  • 每走一步距離+1

pair

pair<int, int> p; //第一個(gè)坐標(biāo)p.first,第二個(gè)坐表p.second;

ACcode

#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;

const int N = 1005;
typedef pair<int, int> pp;

int n, m;
char g[N][N];
int d[N][N];

int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};

void bfs()
{
    memset(d, -1, sizeof d);
    queue<pp> q;
    
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            if(g[i][j] == '1')
            {   
                d[i][j] = 0;
                q.push({i, j}); //加入的時(shí)候應(yīng)該將x,y坐標(biāo)作為一個(gè)整體加入
            }
    
    while(q.size())
    {
        auto t = q.front(); q.pop();
        
        int x = t.first, y = t.second;
        for(int i = 0; i < 4; i++)
        {
            int nx = x + dx[i], ny = y + dy[i];
            if(nx >= 0 && nx < n && ny >= 0 && ny < m && d[nx][ny] == -1)
            {
                d[nx][ny] = d[x][y] + 1;
                q.push({nx, ny});
            }
        }
    }
    
}

int main()
{
    cin >> n >> m;
    
    for(int i = 0; i < n; i++) 
        scanf("%s", g[i]);
        
    bfs();
    
    for(int i = 0; i < n; i++)
    {   
        for(int j = 0; j < m; j++)
            printf("%d ", d[i][j]);
        printf("\n");
    }
    
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 關(guān)于診斷X線(xiàn)機(jī)準(zhǔn)直器的作用,錯(cuò)誤的是()。 (6.0 分) A. 顯示照射野 B. 顯示中心線(xiàn) C. 屏蔽多...
    我們村我最帥閱讀 11,493評(píng)論 0 5
  • 201. M-Q型顯影液組合是()。 (2.0 分) A. 米吐?tīng)柵c菲尼酮的組合 B. 對(duì)苯二酚和菲尼酮的組合 C...
    我們村我最帥閱讀 3,981評(píng)論 0 4
  • 1. 下列敘述錯(cuò)誤的是()。 (2.0 分) A. 質(zhì)量管理包括QA和QC一切活動(dòng)的全部過(guò)程 B. 影像質(zhì)量是指對(duì)...
    我們村我最帥閱讀 4,412評(píng)論 0 8
  • 01. 顱腦CT掃描采用的聽(tīng)眶線(xiàn)是()。 (1.0 分) A. 外耳孔與外眼眥的連線(xiàn) B. 外耳孔上緣與眶下緣的連...
    我們村我最帥閱讀 3,744評(píng)論 0 6
  • 題源 490.迷宮505.迷宮2499.迷宮3三道迷宮題,圍繞一個(gè)小球展開(kāi)一連串復(fù)雜的故事。非常有必要精心研究這三...
    CrazyShawnLiu閱讀 2,296評(píng)論 0 0

友情鏈接更多精彩內(nèi)容