#include <iostream> #define MAX_VERTEX_NUM 1024 using namespace std; typedef struct ArcNode { int adjvex; ArcNode *nextarc; }ArcNode; typedef struct VNode { char data; ArcNode *firstarc; }VNode, AdjList[MAX_VERTEX_NUM]; typedef struct { AdjList vertices; int vexnum, arcnum; }ALGraph; typedef struct { char *base; int front; int rear; }SqQueue; int InitQueue(SqQueue &Q) { Q.base = new char[MAX_VERTEX_NUM]; if(!Q.base) { cout << "分配地址失敗"<<endl; return 0; } Q.front = Q.rear = 0; return 1; } int EnQueue(SqQueue &Q, char e) { if((Q.rear+1) % MAX_VERTEX_NUM == Q.rear) { cout << "隊列已滿!"<<endl; return 0; } Q.base[Q.rear] = e; Q.rear = (Q.rear +1) % MAX_VERTEX_NUM; return 1; } char DeQueue(SqQueue &Q) { char e; if(Q.front == Q.rear) { cout << "隊列爲空!"<<endl; return 0; } e = Q.base[Q.front]; Q.front = (Q.front + 1) % MAX_VERTEX_NUM; return e; } bool QueueEmpty(SqQueue Q) { if (Q.front == Q.rear) { return true; } else { return false; } } int LocateVex(ALGraph G, char ch) { for(int i = 0 ; i< G.vexnum; ++i) { if(G.vertices[i].data == ch) { return i; } } return -1; } char findNode(ALGraph G, int index) { return G.vertices[index].data; } //建圖 void CreateGraph(ALGraph &G) { cout << "請輸入圖的頂點數和邊數:"<<endl; cin >> G.vexnum >> G.arcnum; cout << "請輸入頂點:"<<endl; char ch; for(int i = 0; i<G.vexnum; ++ i) { cin >>ch; G.vertices[i].data = ch; G.vertices[i].firstarc = NULL; } cout << "請輸入圖的各邊及邊的權重:"<<endl; char start, end; int weight; for(int i = 0; i < G.arcnum; ++i) { cin >> start >>end>> weight; int startPostion = LocateVex(G, start); int EndPostion = LocateVex(G,end); ArcNode *s = new ArcNode; s->adjvex = EndPostion; s->nextarc = G.vertices[startPostion].firstarc; G.vertices[startPostion].firstarc = s; } } //遍歷該圖 void printGraph(ALGraph G) { for(int i = 0; i < G.vexnum; ++i) { ArcNode *s = G.vertices[i].firstarc; while(s != NULL) { cout << G.vertices[i].data << " "<< findNode(G,s->adjvex)<<endl; s = s->nextarc; } } } //深度優先遍歷圖 bool visited[MAX_VERTEX_NUM] = {false}; void DFS(ALGraph G, int v) { visited[v] = true; cout << findNode(G,v)<<"->"; ArcNode *w = G.vertices[v].firstarc; while(w != NULL) { int wIndex = w->adjvex; if(!visited[wIndex]) { DFS(G,wIndex); } w = w->nextarc; } } //廣度優先遍歷圖 void BFS(ALGraph G) { int u, w; bool flag[MAX_VERTEX_NUM]={false}; ArcNode *s; char e; SqQueue Q; InitQueue(Q); for(int v = 0; v < G.vexnum; ++v) { if(!flag[v]) { flag[v] = true; cout << findNode(G,v) <<"->"; EnQueue(Q,findNode(G,v)); while(!QueueEmpty(Q)) { e = DeQueue(Q); u = LocateVex(G,e); s = new ArcNode; s = G.vertices[u].firstarc; while(s != NULL) { w = s->adjvex; if(flag[w] == false) { flag[w] = true; cout << findNode(G, w)<<"->"; EnQueue(Q,findNode(G,w)); } s=s->nextarc; } } } } } int main() { ALGraph graph; CreateGraph(graph); char ch; cout <<"遍歷該圖的:"<<endl; printGraph(graph); //深度優先遍歷啊該圖 cout<< "請輸入起始點:" << endl; cin >> ch; int pos = LocateVex(graph, ch); DFS(graph,pos); cout <<endl; //廣度優先遍歷圖 cout << "廣度優先遍歷此圖的結果是:"<<endl; BFS(graph); return 0; }
01. 背景 早些時候我們在社區微信羣發出了一份關於 Milvus 自動問答機器人的調研問卷。 調研受到了社區同學的積極響應,很快我們就收到了很多熱心用戶的回覆。 基於這些回覆,我們整理出了 Milvus Chatbot 的形
本文分享自華爲雲社區《ModelBox-AI應用開發:動物目標檢測【玩轉華爲雲】》,作者:陽光大貓。 一、準備環境 ModelBox端雲協同AI開發套件(Windows)環境準備【視頻教程】 二、應用開發 1. 創建工程 在Model
這個其實是一個特別高頻的面試題,松哥也一直很想和大家仔細來聊一聊這個話題,網上關於這塊的文章很多,但是我一直覺得要把這個問題講清楚還有點難度,今天我來試一試,看能不能和小夥伴們把這個問題梳理清楚,當然,如果小夥伴們覺得看文章不過癮,松哥也有
分享8個開箱即用的API,方便日常處理集合。 1. 快速過濾空值:Stream.ofNullable 該方法是在 Java 9 中引入的,有助於過濾集合中的所有空值,從而可能使我們避免空指針異常。 在下面的示例中,有一個包含 null 的L
一、背景 在日常部門OpsReview過程中,部門內多次遇到應用容器所在的宿主機磁盤繁忙導致的接口響應緩慢,TP99增高等影響服務性能的問題,其中比較有效的解決方案是開啓日誌的異步打印,可以有效避免同步日誌打印在磁盤IO高起的情況下拖慢業
本文分享自華爲雲社區《【MySQL技術專欄】MySQL8.0直方圖介紹》,作者:GaussDB 數據庫。 背景 數據庫查詢優化器負責將SQL查詢轉換爲儘可能高效的執行計劃,但因爲數據環境不斷變化導致優化器對查詢數據瞭解的不夠充足,可能無法
每篇一句 大魔王張怡寧:女兒,這堆金牌你拿去玩吧,但我的銀牌不能給你玩。你要想玩銀牌就去找你王浩叔叔吧,他那銀牌多 前言 爲了講述好Spring MVC最爲複雜的數據綁定這塊,我前面可謂是做足了功課,對此部分知識此處給小夥伴留一個學
作者:vivo 互聯網數據庫團隊- Qiu Xinbo 本文主要通過圖示介紹了用主鍵進行分片查詢的過程,介紹了主鍵分頁查詢存在SQL性能問題,如何去創建高效的索引去優化主鍵分頁查詢的SQL性能問題 對於數據分佈不均
JSON簡介: JSON(Java Script Object Notation)是一種輕量級的數據交換格式,通常用於在不同系統之間傳輸數據。它基於 JavaScript 對象語法,但已成爲一種獨立於語言的格式。JSON 數據以鍵值對的形式
一、簡單介紹: CaffeineCache和Guava的Cache是應用廣泛的本地緩存。 在開發中,爲了達到降低依賴、提高訪問速度的目的。會使用它存儲一些維表接口的返回值和數據庫查詢結果,在有些場景下也會在分佈式緩存上再加上一層本地緩存,
作者:vivo 互聯網大前端團隊 - Ma Lian 本文主要描述了FileProvider,startAnyWhere實現,Parcel不對稱漏洞以及這三者結合產生的漏洞利用實戰,另外闡述了漏洞利用的影響和修復預防措施,這個漏洞波及了
本文分享自華爲雲社區《GaussDB SQL基本語法示例-CASE表達式》,作者:Gauss松鼠會小助手2。 一、前言 SQL是用於訪問和處理數據庫的標準計算機語言。GaussDB支持SQL標準(默認支持SQL2、SQL3和SQL4的主要
Impala目前支持Hadoop中幾種常見的文件格式 Parquet 、 ORC 、 Text 、 Avro 、 RCFile 和 SequenceFile 。下面簡要說明各種格式的使用、限制和一些注意事項。 不同的文件格式有着不同的適用場
本文分享自華爲雲社區《GaussDB SQL基礎語法示例-BOOLEAN表達式》,作者:Gauss松鼠會小助手2。 一、前言 SQL是用於訪問和處理數據庫的標準計算機語言。GaussDB支持的SQL標準(默認支持SQL2、SQL3和SQL
Map是用於保存具有映射關係的數據集合,它具有雙列存儲的特點,即一次必須添加兩個元素,即一組鍵值對<Key,Value>,其中Key的值不可重複(當Key的值重複的時候,後面插入的對象會將之前插入的具有相同的Key值的對象覆蓋掉),Valu