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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图论 —— 图的搜索

發布時間:2025/3/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图论 —— 图的搜索 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【概述】

圖的搜索問題,是給出一個抽象的字符矩陣代表一張圖,根據根據題目要求,對圖進行搜索,關于搜索算法:點擊這里

根據搜索方法的不同,分為深度優先遍歷(DFS)、廣度優先遍歷(BFS),兩者時間復雜度都是 O(N*N),通常采用深度優先遍歷。

【深度優先遍歷】

圖的深度優先遍歷的基本過程為:

  • 從圖中某個頂點 v0 出發,首先訪問 v0
  • 訪問結點 v0 的第一個鄰接點,以這個鄰接點 vt 作為一個新節點,訪問 vt 所有鄰接點,直到以 vt 出發的所有節點都被訪問
  • 回溯到 v0 的下一個未被訪問過的鄰接點,以這個鄰結點為新節點,重復步驟 2,直到圖中所有與 v0 相通的所有節點都被訪問
  • 若此時圖中仍有未被訪問的結點,則另選圖中的一個未被訪問的頂點作為起始點,重復步驟 1,直到圖中的所有節點均被訪問
  • 其基本框架為:

    int vis[N]; void DFS(int i) {for(所有i的鄰接點j) {if(!vis[j]) {if(j == 目標狀態)return true;vis[j]=true;dfs(j);}} }

    【廣度優先遍歷】

    圖的廣度優先遍歷的基本過程為:

  • 從圖中某個頂點 v0 出發,首先訪問 v0,將 v0 加入隊列
  • 將隊首元素的未被訪問過的鄰接點加入隊列,訪問隊首元素并將隊首元素出隊,直到隊列為空
  • 若此時圖中仍有未被訪問的結點,則另選圖中的一個未被訪問的頂點作為起始點,重復步驟 1,直到圖中的所有節點均被訪問過。
  • 其基本框架為:

    bool vis[N]; void BFS(int start) {queue<int> Q;Q.push(start);vis[s]=true;while(!Q.empty()) {int x=Q.front();Q.pop();if(x==目標狀態) {...}for(所有i的鄰接點j) {if(!vis[j]) {Q.push(j);vis[j]=true;}}} }

    【奇偶剪枝】

    對于給出的字符矩陣,在搜索過程中,利用奇偶剪枝能極大的降低時間復雜度。

    1.內容

    假設起點為(sx,sy),終點為(ex,ey),給定 t 步恰好走到終點,如圖所示(“|”豎走,“—”橫走,“+”轉彎),易證 abs(ex-sx)+abs(ey-sy) 為此問題類中任意情況下,起點到終點的最短步數,記做 step,此處 step1=8;

    如圖,為一般情況下非最短路徑的任意走法舉例,step2=14;step2-step1=6,偏移路徑為 6

    推廣:若 t-[abs(ex-sx)+abs(ey-sy)] 結果為奇數,則無法在 t 步恰好到達,返回 false;反之,若結果為偶數,則可以在 t 步恰好到達,返回 true。

    2.應用

    如圖,沒障礙物#時,S到E的最短路長為6,但是當有障礙物時,就要繞行了。

    如圖,黑色為最短路徑,當他繞行(紅色加藍色部分)時,其中藍色部分其實還是最短路徑部分平移來的,所以多走的步數也就是紅色部分。對于紅色部分我們可以分為兩部分,一部分是遠離最短路徑的步數,另一部分是回到最短路徑的部分,他們一定是對稱的,所以多走的步數一定是偶數。

    所以,當問走 x 步能否到達 e,就算出最短路徑長 y,如果 x-y 是偶數就能到達,否則不能到達。

    【例題】

    1.深度優先遍歷

  • 紅與黑(信息學奧賽一本通-T1216):點擊這里
    同題:Red and Black(HDU-1312):點擊這里
  • 迷宮(洛谷-P1605):點擊這里
  • 迷宮(信息學奧賽一本通-T1215):點擊這里
  • 花生采摘(洛谷-P1086):點擊這里
  • LETTERS(信息學奧賽一本通-T1212):點擊這里
  • 棋盤問題(信息學奧賽一本通-T1217):點擊這里
  • Avoid The Lakes(POJ-3620):點擊這里
  • Cat Snuke and a Voyage(AtCoder-2660):點擊這里
  • Applese 走方格(2019牛客寒假算法基礎集訓營 Day4-B):點擊這里
  • Pusher(HDU-2821):點擊這里
  • 填涂顏色(洛谷-P1162):點擊這里
  • 01迷宮(洛谷-P1141)(記憶化):點擊這里
  • Tempter of the Bone(HDU-1010)(奇偶剪枝):點擊這里
  • 2.廣度優先遍歷

  • 仙島求藥(信息學奧賽一本通-T1251):點擊這里
  • 走迷宮(信息學奧賽一本通-T1252):點擊這里
  • 走出迷宮(信息學奧賽一本通-T1254):點擊這里
  • 獻給阿爾吉儂的花束(信息學奧賽一本通-T1256):點擊這里
  • 圍成面積(信息學奧賽一本通-T1359):點擊這里
  • 迷宮(2019牛客寒假算法基礎集訓營 Day6-J):點擊這里
  • The Castle(信息學奧賽一本通-T1250):點擊這里
  • Fennec VS. Snuke(AtCoder-2655):點擊這里
  • Rescue(HDU-1242)(終點找起點):點擊這里
  • Catch him(HDU-2351)(塊狀bfs):點擊這里
  • 迷宮問題(信息學奧賽一本通-T1255)(遞歸輸出):點擊這里
  • Navigating the City(POJ-2435)(通過隊列輸出):點擊這里
  • Dungeon Master(信息學奧賽一本通-T1248)(三維bfs):點擊這里
  • Applese 走迷宮(2019牛客寒假算法基礎集訓營 Day4-C)(三維bfs):點擊這里
  • 炫酷迷宮(2019牛客寒假算法基礎集訓營 Day5-C)(構造+bfs):點擊這里
  • 機器人搬重物(洛谷-P1126)(預處理):點擊這里
  • Lilypad Pondg(POJ-3171)(兩次bfs+預處理):點擊這里
  • The Grove(POJ-3182)(射線法):點擊這里
  • Meteor Shower(POJ-3669)(起點的處理):點擊這里
  • 總結

    以上是生活随笔為你收集整理的图论 —— 图的搜索的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。