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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

第十一周项目实践1 图基本算法库

發布時間:2025/4/16 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第十一周项目实践1 图基本算法库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#ifndef GRAPH_H_INCLUDED #define GRAPH_H_INCLUDED#define MAXV 100 //最大頂點個數 #define INF 32767 //INF表示∞ typedef int InfoType;//以下定義鄰接矩陣類型 typedef struct {int no; //頂點編號InfoType info; //頂點其他信息,在此存放帶權圖權值 } VertexType; //頂點類型typedef struct //圖的定義 {int edges[MAXV][MAXV]; //鄰接矩陣int n,e; //頂點數,弧數VertexType vexs[MAXV]; //存放頂點信息 } MGraph; //圖的鄰接矩陣類型 //以下定義鄰接表類型 typedef struct ANode //弧的結點結構類型 {int adjvex; //該弧的終點位置struct ANode *nextarc; //指向下一條弧的指針InfoType info; //該弧的相關信息,這里用于存放權值 } ArcNode;typedef int Vertex;typedef struct Vnode //鄰接表頭結點的類型 {Vertex data; //頂點信息int count; //存放頂點入度,只在拓撲排序中用ArcNode *firstarc; //指向第一條弧 } VNode;typedef VNode AdjList[MAXV]; //AdjList是鄰接表類型typedef struct {AdjList adjlist; //鄰接表int n,e; //圖中頂點數n和邊數e } ALGraph; //圖的鄰接表類型//功能:由一個反映圖中頂點鄰接關系的二維數組,構造出用鄰接矩陣存儲的圖 //參數:Arr - 數組名,由于形式參數為二維數組時必須給出每行的元素個數,在此將參數Arr聲明為一維數組名(指向int的指針) // n - 矩陣的階數 // g - 要構造出來的鄰接矩陣數據結構 void ArrayToMat(int *Arr, int n, MGraph &g); //用普通數組構造圖的鄰接矩陣 void ArrayToList(int *Arr, int n, ALGraph *&); //用普通數組構造圖的鄰接表 void MatToList(MGraph g,ALGraph *&G);//將鄰接矩陣g轉換成鄰接表G void ListToMat(ALGraph *G,MGraph &g);//將鄰接表G轉換成鄰接矩陣g void DispMat(MGraph g);//輸出鄰接矩陣g void DispAdj(ALGraph *G);//輸出鄰接表G#endif // GRAPH_H_INCLUDED

graph.h:

#include <stdio.h> #include <malloc.h> #include "graph.h" //功能:由一個反映圖中頂點鄰接關系的二維數組,構造出用鄰接矩陣存儲的圖 //參數:Arr - 數組名,由于形式參數為二維數組時必須給出每行的元素個數,在此將參數Arr聲明為一維數組名(指向int的指針) // n - 矩陣的階數 // g - 要構造出來的鄰接矩陣數據結構 void ArrayToMat(int *Arr, int n, MGraph &g) {int i,j,count=0; //count用于統計邊數,即矩陣中非0元素個數g.n=n;for (i=0; i<g.n; i++)for (j=0; j<g.n; j++){g.edges[i][j]=Arr[i*n+j]; //將Arr看作n×n的二維數組,Arr[i*n+j]即是Arr[i][j],計算存儲位置的功夫在此應用//更顯示了二維數組在內存中的存儲機制if(g.edges[i][j]!=0 && g.edges[i][j]!=INF)count++;}g.e=count; } void ArrayToList(int *Arr, int n, ALGraph *&G) {int i,j,count=0; //count用于統計邊數,即矩陣中非0元素個數ArcNode *p;G=(ALGraph *)malloc(sizeof(ALGraph));G->n=n;for (i=0; i<n; i++) //給鄰接表中所有頭節點的指針域置初值G->adjlist[i].firstarc=NULL;for (i=0; i<n; i++) //檢查鄰接矩陣中每個元素for (j=n-1; j>=0; j--)if (Arr[i*n+j]!=0) //存在一條邊,將Arr看作n×n的二維數組,Arr[i*n+j]=Arr[i][j](n是有多少列){p=(ArcNode *)malloc(sizeof(ArcNode)); //創建一個節點*pp->adjvex=j;p->info=Arr[i*n+j];p->nextarc=G->adjlist[i].firstarc; //采用頭插法插入*p,和鏈表的操作一樣G->adjlist[i].firstarc=p;}G->e=count; } void MatToList(MGraph g, ALGraph *&G) //將鄰接矩陣g轉換成鄰接表G {int i,j;ArcNode *p;G=(ALGraph *)malloc(sizeof(ALGraph));for (i=0; i<g.n; i++) //給鄰接表中所有頭節點的指針域置初值G->adjlist[i].firstarc=NULL;for (i=0; i<g.n; i++) //檢查鄰接矩陣中每個元素for (j=g.n-1; j>=0; j--)if (g.edges[i][j]!=0) //存在一條邊{p=(ArcNode *)malloc(sizeof(ArcNode)); //創建一個節點*pp->adjvex=j;p->info=g.edges[i][j];p->nextarc=G->adjlist[i].firstarc; //采用頭插法插入*pG->adjlist[i].firstarc=p;}G->n=g.n;G->e=g.e; } void ListToMat(ALGraph *G,MGraph &g) //將鄰接表G轉換成鄰接矩陣g {int i,j;ArcNode *p;g.n=G->n; //根據一樓同學“舉報”改的。g.n未賦值,下面的初始化不起作用g.e=G->e;for (i=0; i<g.n; i++) //先初始化鄰接矩陣for (j=0; j<g.n; j++)g.edges[i][j]=0;for (i=0; i<G->n; i++) //根據鄰接表,為鄰接矩陣賦值{p=G->adjlist[i].firstarc;while (p!=NULL){g.edges[i][p->adjvex]=p->info;p=p->nextarc;}} } void DispMat(MGraph g) //輸出鄰接矩陣g {int i,j;for (i=0; i<g.n; i++){for (j=0; j<g.n; j++)if (g.edges[i][j]==INF)printf("%3s","∞");elseprintf("%3d",g.edges[i][j]);printf("\n");} } void DispAdj(ALGraph *G) //輸出鄰接表G {int i;ArcNode *p;for (i=0; i<G->n; i++){p=G->adjlist[i].firstarc;printf("%3d: ",i);while (p!=NULL){printf("-->%d/%d ",p->adjvex,p->info);p=p->nextarc;}printf("\n");} } main.cpp:

#include <stdio.h> #include <malloc.h> #include "graph.h"int main() {MGraph g1,g2;ALGraph *G1,*G2;int A[6][6]={{0,5,0,7,0,0},{0,0,4,0,0,0},{8,0,0,0,0,9},{0,0,5,0,0,6},{0,0,0,5,0,0},{3,0,0,0,1,0}};ArrayToMat(A[0], 6, g1); //取二維數組的起始地址作實參,用A[0],因其實質為一維數組地址,與形參匹配printf(" 有向圖g1的鄰接矩陣:\n");DispMat(g1);ArrayToList(A[0], 6, G1);printf(" 有向圖G1的鄰接表:\n");DispAdj(G1);MatToList(g1,G2);printf(" 圖g1的鄰接矩陣轉換成鄰接表G2:\n");DispAdj(G2);ListToMat(G1,g2);printf(" 圖G1的鄰接表轉換成鄰接鄰陣g2:\n");DispMat(g2);printf("\n");return 0; }

總結

以上是生活随笔為你收集整理的第十一周项目实践1 图基本算法库的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久精品久久久精品美女 | 曰韩一级片 | 天天看天天摸天天操 | 久久精品国产亚洲av无码娇色 | 日日夜夜操操操 | 深夜视频在线免费观看 | 麻豆免费下载 | 欧美色图一区二区三区 | 大尺度做爰呻吟舌吻情头 | 日韩在线播放av | 国产伦精品一区二区三区网站 | 午夜免费成人 | 亚洲国产毛片 | 欧美性免费| 午夜视频导航 | 日本在线有码 | 清纯唯美第一页 | 夜夜操操操 | 欧美另类极品videosbest使用方法 | 国产精品77 | 疯狂伦交| 久久精品99国产国产精 | 97人人人| 欧美一区亚洲二区 | 狠狠操人人干 | 日韩欧美第一页 | 国产福利不卡视频 | 日韩专区一区 | 色就是色欧美 | av免费在线电影 | 久久久女人 | 欧美黄网站 | 伊人久久综合影院 | 四虎国产精品免费 | 久色资源 | 日本免费高清 | 黄色av网站在线免费观看 | 伊人影片 | 台湾佬av | 久久午夜剧场 | 毛茸茸多毛bbb毛多视频 | 成人免费黄色网址 | 日本久操视频 | 丰满人妻一区二区三区53 | 欧美做爰啪啪xxxⅹ性 | 91国产网站 | 久久久久人妻一区精品 | 欧美第一页在线观看 | 香蕉视频黄色片 | 免费男女乱淫真视频免费播放 | 亚洲成人无码久久 | 日韩草逼视频 | 狠狠干2020 | 久一视频在线观看 | 亚洲视频一区在线观看 | 国产寡妇色xxⅹ交肉视频 | 一区二区三区视频在线免费观看 | 国产精品免费观看视频 | 亚洲精品一区中文字幕乱码 | 黄色片视频免费在线观看 | 亚洲免费黄色网 | 久久99久久久 | 在线激情网站 | 欧美做爰爽爽爽爽爽爽 | 免费看色 | 中日韩男男gay无套 人人草人人干 | 在线免费观看一区 | 国产精品一二 | 肉色丝袜小早川怜子av | 日本高清视频一区二区 | www日韩精品 | 国产sm在线观看 | 国产成人精品一区二区三区福利 | 欧美丝袜一区二区三区 | 日韩av一区二区在线播放 | 丁香啪啪综合成人亚洲 | 日韩精品电影在线观看 | 午夜精品av | 免费无遮挡无码永久视频 | 波多野结衣av在线免费观看 | 色污网站| 免费观看一区二区三区视频 | 艳妇臀荡乳欲伦交换电影 | 国产69精品麻豆 | 国产高清免费av | 波多野结衣一区二 | 777米奇影视第四色 五月丁香久久婷婷 | 国产成人av一区二区三区不卡 | 999国内精品永久免费视频 | 开心激情播播 | 男女一级特黄 | 激情全身裸吻胸 | 日韩午夜激情 | 国产精品久久久久久久一区探花 | 无码人妻精品一区二区三应用大全 | 日狠狠| 欧美少妇xxxxx | 中文字幕一区二区三区免费 | 四虎免费观看 |