c++數據結構--構造無向圖(算法6.1),深度和廣度遍歷

實驗內容:

實現教材算法6.2利用鄰接矩陣構造無向圖的算法,提供從鄰接矩陣獲得鄰接表的功能,在此基礎上進行深度優先遍歷和廣度優先遍歷。

實驗步驟:

(1)按照實驗要求編寫代碼,構造無向圖。
?創建所示無向圖
屏幕輸出鄰接矩陣
0 1 0 0 0 1
1 0 1 1 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 0 1 1 0 1
1 0 0 0 1 0

深度優先遍歷

屏幕輸出: 1 2 3 4 5 6

廣度優先遍歷

屏幕輸出:1 2 6 3 4 5
(2)輸入驗收用例,驗證其輸出結果。

#include <iostream>
#ifndef DATA_STRUCTURE_STATUS_H
#include <stdio.h>
//狀態碼
#define TRUE              1
#define FALSE            0
#define OK                  1
#define ERROR           0
#endif
#ifndef OVERFLOW
#define OVERFLOW    -2
#endif // OVERFLOW
#ifndef NULL
#define NULL((void*) 0)
#endif // NULL
typedef int Status;
#define MaxInt 32767  //表示極大值
#define MVNum 100     //表示最大頂點數
using namespace std;//圖的鄰接矩陣存儲表示:
typedef int VerTexType;//頂點字符類型
typedef int ArcType;    //邊的權值
typedef struct
{VerTexType vexs[MVNum];//頂點表ArcType arcs[MVNum][MVNum];//鄰接矩陣int vexnum,arcnum;//圖的當前點數和邊數
}AMGraph;typedef string OtherInfo;//圖的鄰接表存儲表示:
typedef struct ArcNode//邊結構
{int adjvex;struct ArcNode *nextarc;OtherInfo info;//其他信息
}ArcNode;typedef struct VNode//頂點結構
{VerTexType data;//存儲頂點信息ArcNode *firstarc;
}VNode,AdjList[MVNum];typedef struct
{AdjList vertics;//鄰接表int vexnum,arcnum;//頂點數和弧數int kind;
}ALGraph;bool visited[MVNum];int LocateVex(AMGraph G,VerTexType u)
{//定位每個頂點的位置int i;for(i=0;i<G.vexnum;i++){if(u==G.vexs[i])return i;}return -1;
}//構建無向網:
Status CreateUDN(AMGraph &G)
{cout<<"請輸入圖的頂點數目,邊數目:";cin>>G.vexnum>>G.arcnum;//輸入當前的頂點數目和邊的數目for(int i=0;i<G.vexnum;i++){cout<<"請輸入第"<<i<<"個頂點:";cin>>G.vexs[i];//初始化點的信息}for(int i=0;i<G.vexnum;i++){for(int j=0;j<G.vexnum;j++){G.arcs[i][j]=MaxInt;//初始化鄰接矩陣}}int i,j;int v1,v2,w;for(int k=0;k<G.arcnum;k++){cout<<"邊:";cin>>v1>>v2>>w;i=LocateVex(G,v1);j=LocateVex(G,v2);G.arcs[i][j]=w;G.arcs[j][i]=G.arcs[i][j];}return OK;
}//鄰接矩陣轉換成鄰接表
void change(AMGraph G,ALGraph &p)
{int i,j;ArcNode *q;for(i=0;i<G.vexnum;i++){p.vertics[i].firstarc=NULL;}for(i=0;i<G.vexnum;i++){for(j=0;j<G.vexnum;j++){if(G.arcs[i][j]){q=new ArcNode;q->adjvex=j;q->nextarc=p.vertics[j].firstarc;p.vertics[j].firstarc=q;}}}
}//深度優先遍歷:
void DFS_AM(AMGraph G,int v)
{cout<<v+1;visited[v]=true;for(int w=0;w<G.vexnum;w++)//依次檢查鄰接矩陣所在的行{if(G.arcs[v][w]!=0&&(!visited[w]))DFS_AM(G,w);//w是v的鄰接點,如果w未訪問,則遞歸調用DFS}
}//廣度優先遍歷:
void BFS(AMGraph G,int v)
{for(int i=0;i<G.vexnum;i++){visited[i]=false;}int Q[MaxInt];cout<<G.vexs[v];visited[v]=true;int w,u;int front=-1,rear=-1;Q[++rear]=v;while(front!=rear){u=Q[++front];for(w=0;w<G.vexnum;w++){if((!visited[w])&&(G.arcs[u][w]==1)){cout<<G.vexs[w];visited[w]=true;Q[++rear]=w;}}}
}int main()
{cout<<"無向網圖"<<endl;cout<<"1.構建網圖"<<endl;cout<<"2.輸出鄰接矩陣"<<endl;cout<<"3.深度優先遍歷"<<endl;cout<<"4.廣度優先遍歷"<<endl;int n,a;AMGraph G;ALGraph P;while(1){cout<<"請輸入你的選擇:"<<endl;cin>>n;if(n==1){CreateUDN(G);cout<<"操作完成!"<<endl;}else if(n==2){cout<<"鄰接矩陣為:";for(int i=0;i<G.vexnum;i++){cout<<endl;for(int j=0;j<G.vexnum;j++){if(G.arcs[i][j]==MaxInt){cout<<"0 ";}else{cout<<G.arcs[i][j]<<" ";}}}cout<<"\n操作完成"<<endl;}else if(n==3){cout<<"深度優先遍歷為:";DFS_AM(G,0);cout<<"\n操作完成!"<<endl;}else if(n==4){cout<<"廣度優先遍歷為:";BFS(G,0);cout<<"\n操作完成"<<endl;}else if(n==5){cout<<"本次操作結束"<<endl;break;}}return 0;
}

在這里插入圖片描述

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

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

相關文章

淺談數學模型在UGC/AIGC游戲數值調參中的應用(AI智能體)

淺談數學模型在UGC/AIGC游戲數值調參中的應用 ygluu 盧益貴 關鍵詞&#xff1a;UGC、AIGC、AI智能體、大模型、數學模型、游戲數值調參、游戲策劃 一、前言 在策劃大大群提出《游戲工廠&#xff1a;AI&#xff08;AIGC/ChatGPT&#xff09;與流程式游戲開發》討論之后就已完…

Hi3861 OpenHarmony嵌入式應用入門--HTTPD

httpd 是 Apache HTTP Server 的守護進程名稱&#xff0c;Apache HTTP Server 是一種廣泛使用的開源網頁服務器軟件。 本項目是從LwIP中抽取的HTTP服務器代碼&#xff1b; Hi3861 SDK中已經包含了一份預編譯的lwip&#xff0c;但沒有開啟HTTP服務器功能&#xff08;靜態庫無法…

NiFi1.25版本HTTPS模式下RestAPI使用入門

Apache NiFi 是一個強大的數據流處理工具&#xff0c;通過其 REST API&#xff0c;用戶可以遠程管理和控制數據流處理器。本文將介紹如何使用 NiFi 1.25 版本HTTPS 模式下Rest API&#xff0c;包括獲取 token、獲取組件信息、啟動和停止組件、以及更改組件的調度頻率等操作。 …

Linux vim文本編輯器

Vim&#xff08;Vi IMproved&#xff09;是一個高度可配置的文本編輯器&#xff0c;它是Vi編輯器的增強版本&#xff0c;廣泛用于程序開發和系統管理。Vim不僅保留了Vi的所有功能&#xff0c;還增加了許多新特性&#xff0c;使其更加強大和靈活。 Vim操作模式 普通模式&#xf…

科普文:微服務之Apollo配置中心

1. 基本概念 由于Apollo 概念比較多&#xff0c;剛開始使用比較復雜&#xff0c;最好先過一遍概念再動手實踐嘗試使用。 1.1、背景 隨著程序功能的日益復雜&#xff0c;程序的配置日益增多&#xff0c;各種功能的開關、參數的配置、服務器的地址……對程序配置的期望值也越來…

在 C++中,如何使用智能指針來有效地管理動態分配的內存,并避免內存泄漏的問題?

在C中&#xff0c;可以使用智能指針來有效地管理動態分配的內存&#xff0c;避免內存泄漏的問題。下面是一些常用的智能指針類型和操作&#xff1a; std::unique_ptr&#xff1a; std::unique_ptr是C11引入的一種獨占式智能指針&#xff0c;它擁有對分配的內存的唯一所有權。當…

026-GeoGebra中級篇-曲線(2)_極坐標曲線、參數化曲面、分段函數曲線、分形曲線、復數平面上的曲線、隨機曲線、非線性動力系統的軌跡

除了參數曲線、隱式曲線和顯式曲線之外&#xff0c;還有其他類型的曲線表示方法。本篇主要概述一下極坐標曲線、參數化曲面、分段函數曲線、分形曲線、復數平面上的曲線、隨機曲線、和非線性動力系統的軌跡&#xff0c;可能沒有那么深&#xff0c;可以先了解下。 目錄 1. 極坐…

「網絡通信」HTTP 協議

HTTP &#x1f349;簡介&#x1f349;抓包工具&#x1f349;報文結構&#x1f34c;請求&#x1f34c;響應&#x1f34c;URL&#x1f95d;URL encode &#x1f34c;方法&#x1f34c;報文字段&#x1f95d;Host&#x1f95d;Content-Length & Content-Type&#x1f95d;User…

運動控制問題

第一類運動控制問題是指被控制對象的空間位置或軌跡運動發生改變的運動控制系統的控制問題。這類運動控制問題在理論上完全遵循牛頓力學定律和運動學原則。 1、運動控制問題 第1類運動控制的核心是研究被控對象的運動軌跡 、分析運動路徑、運動速度、加速度與時間的關系,常用…

深入解析PHP框架:Symfony框架詳解與應用

文章目錄 深入解析PHP框架&#xff1a;Symfony框架詳解與應用一、什么是Symfony&#xff1f;Symfony的優勢 二、Symfony的核心概念1. 控制器2. 路由3. 模板4. 服務容器5. 事件調度器 三、Symfony的主要功能1. 表單處理2. 數據庫集成3. 安全性4. 國際化5. 調試與日志 四、開發流…

記一次docker容器安裝MySQL,navicat無法連接報錯(10060錯誤)

今天在云服務器上使用docker部署mysql 8.0.11時&#xff0c;遇到了一個詭異的問題&#xff0c;在云服務器的docker容器內可以連接上mysql&#xff0c;然而在自己電腦上連接mysql時報錯&#xff1a;Can‘t connect to MySQL server on localhost (10060) 下面是網上搜尋的幾種可…

SpringMVC框架--個人筆記步驟總結

一、步驟 1.創建工程 2.加入springmvc依賴--pom.xml <!--springmvc依賴--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.10.RELEASE</version> </depend…

Camunda如何通過外部任務與其他系統自動交互

文章目錄 簡介流程圖外部系統pom.xmllogback.xml監聽類 啟動流程實例常見問題Public Key Retrieval is not allowed的解決方法java.lang.reflect.InaccessibleObjectException 流程圖xml 簡介 前面我們已經介紹了Camunda的基本操作、任務、表&#xff1a; Camunda組件與服務與…

Linux命令更新-Vim 編輯器

簡介 Vim 是 Linux 系統中常用的文本編輯器&#xff0c;功能強大、可擴展性強&#xff0c;支持多種編輯模式和操作命令&#xff0c;被廣泛應用于程序開發、系統管理等領域。 1. Vim 命令模式 Vim 啟動后默認進入命令模式&#xff0c;此時鍵盤輸入的命令將用于控制編輯器本身&…

Android ImageDecoder把瘦高/扁平大圖相當于fitCenter模式decode成目標小尺寸Bitmap,Kotlin

Android ImageDecoder把瘦高/扁平大圖相當于fitCenter模式decode成目標小尺寸Bitmap&#xff0c;Kotlin val sz Size(MainActivity.SIZE, MainActivity.SIZE)val src ImageDecoder.createSource(mContext?.contentResolver!!, uri)val bitmap ImageDecoder.decodeBitmap(sr…

【Playwright+Python】系列 Pytest 插件在Playwright中的使用

一、命令行使用詳解 使用 Pytest 插件在Playwright 中來編寫端到端的測試。 1、命令行執行測試 pytest --browser webkit --headed 2、使用 pytest.ini 文件配置 內容如下&#xff1a; [pytest] # Run firefox with UIaddopts --headed --browser firefox效果&#xff1…

云計算【第一階段(31)】PXE高效批量網絡裝機

一、系統安裝 1.1、系統裝機的三種引導方式 1. 硬盤 2. 光驅&#xff08; u 盤&#xff09; 3. 網絡啟動 pxe 1.2、系統安裝過程 加載boot loader Boot Loader 是在操作系統內核運行之前運行的一段小程序。通過這段小程序&#xff0c;我們可以初始化硬件設備、建立內存空間的映…

【CSS in Depth 2 精譯】3.1.2 邏輯屬性 + 3.1.3 用好邏輯屬性的簡寫形式

當前內容所在位置&#xff08;可進入專欄查看其他譯好的章節內容&#xff09; 第一章 層疊、優先級與繼承&#xff08;已完結&#xff09; 1.1 層疊1.2 繼承1.3 特殊值1.4 簡寫屬性1.5 CSS 漸進式增強技術1.6 本章小結 第二章 相對單位&#xff08;已完結&#xff09; 2.1 相對…

深入探討:CPU問題的深度分析與調優

引言 你是否曾經遇到過這樣的情況:系統運行突然變慢,用戶抱怨不斷,檢查后發現CPU使用率居高不下?這時候,你會如何解決?本文將詳細解析CPU問題的分析與調優方法,幫助你在面對類似問題時游刃有余。 案例分析:一次CPU性能瓶頸的解決過程 某知名互聯網公司在一次促銷活動…

《Python數據科學之一:初見數據科學與環境》

《Python數據科學之一&#xff1a;初見數據科學與環境》 歡迎來到“Python數據科學”系列的第一篇文章。在這個系列中&#xff0c;我們將通過Python的鏡頭&#xff0c;深入探索數據科學的豐富世界。首先&#xff0c;讓我們設置和理解數據科學的基本概念以及在開始任何數據科學項…