圖的遍歷模板

圖的遍歷

BFS

求距離

在這里插入圖片描述

#include<bits/stdc++.h>using namespace std;int n, m, k,q[20001],dist[20001];
vector<int> edge[20001];int main(){scanf("%d%d%d",&n,&m,&k);for (int i = 1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);edge[x].push_back(y);edge[y].push_back(x);}while(k--){int s,t;scanf("%d%d",&s,&t);memset(dist,255,sizeof(dist));dist[s]=0;int front=1,rear=1;q[1] = s;while(front<=rear){int x=q[front];front++;for(auto y:edge[x]){if(dist[y]==-1){dist[y]=dist[x]+1;q[++rear] = y;}}}printf("%d\n", dist[t]);}
}
/*
輸入
3 2 2
1 2
2 3
1 2
1 3*/

迷宮

在這里插入圖片描述

#include<bits/stdc++.h>using namespace std;int D[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int n,m,q[1000001][2],dist[1001][1001];
char s[1001][1002];int main(){scanf("%d%d",&n,&m);for (int i = 1; i <= n;i++){scanf("%s", s[i] + 1);}int sx,sy,ex,ey;for(int i=1;i<=n;i++){for (int j = 1; j <= m;j++){if(s[i][j]=='S'){sx = i,sy = j;}else if(s[i][j]=='E'){ex = i, ey = j;}}}memset(dist,255,sizeof(dist));dist[sx][sy]=0;int front =1,rear=1;q[1][0]=sx,q[1][1]=sy;while(front <= rear){int x=q[front][0],y=q[front][1];++front;for (int i = 0; i < 4;i++){int xx = x + D[i][0],yy=y+D[i][1];if(xx<1||xx>n||yy<1||yy>m){continue;}if(s[xx][yy]!='X'&&dist[xx][yy]==-1){dist[xx][yy]=dist[x][y]+1;q[++rear][0]=xx;q[rear][1] = yy;}}}printf("%d\n", dist[ex][ey]);
}

馬的遍歷

在這里插入圖片描述

#include <bits/stdc++.h>using namespace std;int D[8][2] = {{-1, 2}, {-2, 1}, {-2, -1}, {-1, -2}, {1, 2}, {2, 1}, {2, -1}, {1, -2}};
int n,m,x,y,dist[401][401];
int q[160001][2];
bool b[401][401];int main(){scanf("%d%d%d%d",&n,&m,&x,&y);memset(dist,-1,sizeof(dist));memset(b, false, sizeof(b));int front = 1,rear=1;q[1][0]=x,q[1][1]=y;dist[x][y] = 0, b[x][y] = true;while(front<=rear){int xx=q[front][0],yy=q[front][1];front++;for (int i = 0; i < 8;i++){int xxx = xx + D[i][0], yyy = yy + D[i][1];if (xxx < 1 || xxx > n || yyy < 1 || yyy > m){continue;}else if(!b[xxx][yyy]){b[xxx][yyy]=true;dist[xxx][yyy] = dist[xx][yy] + 1;q[++rear][0] = xxx, q[rear][1] = yyy;}}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){printf("%d ", dist[i][j]);}printf("\n");}
}

在這里插入圖片描述

求距離2

#include <bits/stdc++.h>using namespace std;int n,m,k,s,t,dist[20001];
vector<pair<int, int>> edge[100001];
vector<int> c[100001];int main(){scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=m;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);edge[a].push_back({b,c});edge[b].push_back({a, c});}for (; k--;){scanf("%d%d",&s,&t);memset(dist, 255, sizeof(dist));for (int i = 0; i <= n;i++)c[i].clear();dist[s] = 0;c[0].push_back(s);for (int i = 0; !c[i].empty();i++){int front = 0, rear = c[i].size() - 1;while (front <= rear){int x = c[i][front];front++;for (auto y : edge[x]){if (!y.second && dist[y.first] == -1){dist[y.first]=dist[x];c[i].push_back(y.first);++rear;}}if(dist[t]!=-1){break;}for(auto y:edge[x]){if(y.second&&dist[y.first]==-1){dist[y.first]=dist[x]+1;c[i+1].push_back(y.first);}}}}printf("%d\n", dist[t]);}
}/*
4 4 1
1 2 0
1 3 1
2 4 1
3 4 1
1 4*/

DFS

在這里插入圖片描述

連通塊計數

#include <bits/stdc++.h>using namespace std;int n,m;
vector<int > edge[20001];
bool b[20001];inline void dfs(int x){b[x]=true;for(auto y:edge[x]){if(!b[y]){dfs(y);}}
}int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);edge[x].push_back(y);edge[y].push_back(x);}int cnt = 0;memset(b,false,sizeof(b));for(int i=1;i<=n;i++){if(!b[i]){dfs(i);cnt++;}}printf("%d", cnt);
}

在這里插入圖片描述

哈密頓回路

#include <bits/stdc++.h>using namespace std;int n,m,k;
vector<int> edge[30];
bool b[9];bool dfs(int x,int c){if(c==n&&x==k) return true;for(auto i:edge[x]){if(!b[i]){b[i]=true;if(dfs(i,c+1))return true;b[i] = false;}}return false;
}int main(){scanf("%d%d",&n,&m);for (int i = 1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);edge[x].push_back(y);edge[y].push_back(x);}scanf("%d", &k);if(dfs(k,0))printf("Yes");elseprintf("No");}
/*
4 5
1 2
2 3
1 3
1 4
2 4
4
*/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87078.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87078.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87078.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java集合 - LinkedList底層源碼解析

以下是基于 JDK 8 的 LinkedList 深度源碼解析&#xff0c;涵蓋其數據結構、核心方法實現、性能特點及使用場景。我們從 類結構、Node節點、插入/刪除/訪問操作、線程安全、性能對比 等角度進行詳細分析 一、類結構與繼承關系 1. 類定義 public class LinkedList<E> e…

Pytorch 卷積神經網絡參數說明一

系列文章目錄 文章目錄 系列文章目錄前言一、卷積層的定義1.常見的卷積操作2. 感受野3. 如何理解參數量和計算量4.如何減少計算量和參數量 二、神經網絡結構&#xff1a;有些層前面文章說過&#xff0c;不全講1. 池化層&#xff08;下采樣&#xff09;2. 上采樣3. 激活層、BN層…

C++ 中的 iostream 庫:cin/cout 基本用法

iostream 是 C 標準庫中用于輸入輸出操作的核心庫&#xff0c;它基于面向對象的設計&#xff0c;提供了比 C 語言的 stdio.h 更強大、更安全的 I/O 功能。下面詳細介紹 iostream 庫中最常用的輸入輸出工具&#xff1a;cin 和 cout。 一、 基本概念 iostream 庫&#xff1a;包…

SAP復制一個自定義移動類型

SAP復制移動類型 在SAP系統中&#xff0c;復制移動類型201可以通過事務碼OMJJ或SPRO路徑完成&#xff0c;用于創建自定義的移動類型以滿足特定業務需求。 示例操作步驟 進入OMJJ事務碼&#xff1a; 打開事務碼OMJJ&#xff0c;選擇“移動類型”選項。 復制移動類型&#xff…

Bambu Studio 中的“回抽“與“裝填回抽“的區別

回抽 裝填回抽: Bambu Studio 中的“回抽” (Retraction) 和“裝填回抽”(Prime/Retract) 是兩個不同的概念&#xff0c;它們都與材料擠出機的操作過程相關&#xff0c;但作用和觸發條件有所不同。 回抽(Retraction): 回抽的作用, 在打印機移動到另一個位置之前&#xff0c;將…

危化品安全監測數據分析挖掘范式:從被動響應到戰略引擎的升維之路

在危化品生產的復雜生態系統中,安全不僅僅是合規性要求,更是企業生存和發展的生命線。傳統危化品安全生產風險監測預警系統雖然提供了基礎保障,但其“事后響應”和“單點預警”的局限性日益凸顯。我們正處在一個由大數據、人工智能、數字孿生和物聯網技術驅動的范式變革前沿…

C++ RPC 遠程過程調用詳細解析

一、RPC 基本原理 RPC (Remote Procedure Call) 是一種允許程序調用另一臺計算機上子程序的協議,而不需要程序員顯式編碼這個遠程交互細節。其核心思想是使遠程調用看起來像本地調用一樣。 RPC 工作流程 客戶端調用:客戶端調用本地存根(stub)方法參數序列化:客戶端存根將參…

Python:操作 Excel 預設色

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 Python 操作 Excel 系列 讀取單元格數據按行寫入設置行高和列寬自動調整行高和列寬水平…

中科院1區|IF10+:加大醫學系團隊利用GPT-4+電子病歷分析,革新肝硬化并發癥隊列識別

中科院1區|IF10&#xff1a;加大醫學系團隊利用GPT-4電子病歷分析&#xff0c;革新肝硬化并發癥隊列識別 在當下的科研領域&#xff0c;人工智能尤其是大語言模型的迅猛發展&#xff0c;正為各個學科帶來前所未有的機遇與變革。在醫學范疇&#xff0c;從疾病的早期精準篩查&am…

Python學習小結

bg&#xff1a;記錄一下&#xff0c;怕忘了&#xff1b;先寫一點&#xff0c;后面再補充。 1、沒有方法重載 2、字段都是公共字段 3、都是類似C#中頂級語句的寫法 4、對類的定義直接&#xff1a; class Student: 創建對象不需要new關鍵字&#xff0c;直接stu Student() 5、方…

QCustomPlot 中實現拖動區域放大?與恢復

1、拖動區域放大? 在 QCustomPlot 中實現 ?拖動區域放大?&#xff08;即通過鼠標左鍵拖動繪制矩形框選區域進行放大&#xff09;的核心方法是設置 SelectionRectMode。具體操作步驟&#xff1a; 1?&#xff09;禁用拖動模式? 確保先關閉默認的圖表拖動功能&#xff08;否…

如何將文件從 iPhone 傳輸到閃存驅動器

您想將文件從 iPhone 或 iPad 傳輸到閃存盤進行備份嗎&#xff1f;這是一個很好的決定&#xff0c;但您需要先了解一些實用的方法。雖然 Apple 生態系統在很大程度上是封閉的&#xff0c;但您可以使用一些實用工具將文件從 iPhone 或 iPad 傳輸到閃存盤。下文提供了這些行之有效…

互聯網大廠Java求職面試:云原生架構與微服務設計中的復雜挑戰

互聯網大廠Java求職面試&#xff1a;云原生架構與微服務設計中的復雜挑戰 面試官開場白 面試官&#xff08;嚴肅模式開啟&#xff09;&#xff1a;鄭薪苦&#xff0c;歡迎來到我們的技術面試環節。我是本次面試的技術總監&#xff0c;接下來我們將圍繞云原生架構、微服務設計、…

leetcode-hot-100 (鏈表)

1. 相交鏈表 題目鏈接&#xff1a;相交鏈表 題目描述&#xff1a;給你兩個單鏈表的頭節點 headA 和 headB &#xff0c;請你找出并返回兩個單鏈表相交的起始節點。如果兩個鏈表不存在相交節點&#xff0c;返回 null 。 解答&#xff1a; 其實這道題目我一開始沒太看懂題目給…

Web前端基礎之HTML

一、瀏覽器 火狐瀏覽器、谷歌瀏覽器(推薦)、IE瀏覽器 推薦谷歌瀏覽器原因&#xff1a; 1、簡潔大方,打開速度快 2、開發者調試工具&#xff08;右鍵空白處->檢查&#xff0c;打開調試模式&#xff09; 二、開發工具 核心IDE工具 Visual Studio Code (VS Code)? 微軟開發…

11.TCP三次握手

TCP連接建立與傳輸 1&#xff0e;主機 A 與主機 B 使用 TCP 傳輸數據&#xff0c;A 是 TCP 客戶&#xff0c;B 是 TCP 服務器。假設有512B 的數據要傳輸給 B&#xff0c;B 僅給 A 發送確認&#xff1b;A 的發送窗口 swnd 的尺寸為 100B&#xff0c;而 TCP 數據報文段每次也攜帶…

Python 爬蟲入門 Day 3 - 實現爬蟲多頁抓取與翻頁邏輯

Python 第二階段 - 爬蟲入門 &#x1f3af; 今日目標 掌握網頁分頁的原理和定位“下一頁”的鏈接能編寫循環邏輯自動翻頁抓取內容將多頁抓取整合到爬蟲系統中 &#x1f4d8; 學習內容詳解 &#x1f501; 網頁分頁邏輯介紹 以 quotes.toscrape.com 為例&#xff1a; 首頁鏈…

分布式定時任務系列12:XXL-job的任務觸發為什么是死循環?

傳送門 分布式定時任務系列1&#xff1a;XXL-job安裝 分布式定時任務系列2&#xff1a;XXL-job使用 分布式定時任務系列3&#xff1a;任務執行引擎設計 分布式定時任務系列4&#xff1a;任務執行引擎設計續 分布式定時任務系列5&#xff1a;XXL-job中blockingQueue的應用 …

位運算詳解之異或運算的奇妙操作

位運算詳解之異或運算的奇妙操作 一、異或運算的本質與核心性質1.1 異或運算的定義與邏輯規則1.2 異或運算的核心代數性質&#xff08;1&#xff09;自反性&#xff1a;a ^ a 0&#xff08;2&#xff09;恒等性&#xff1a;a ^ 0 a&#xff08;3&#xff09;交換律&#xff1…

Element Plus 去除下拉菜單周黑邊

問題&#xff1a; 如上圖所示&#xff0c;當鼠標移入&#xff08;hover&#xff09;和點擊時就會圍繞一圈黑色邊框&#xff0c;但通過本文的方案 100% 完美解決。 解決方案: :deep(:focus-visible) {outline: none; } 備用方案 :deep(.el-tooltip__trigger:focus-visible) …