資源簡介
以鄰接多重表為存儲結(jié)構(gòu),實(shí)現(xiàn)連通無向圖的深度優(yōu)先和廣度優(yōu)先遍歷。以用戶指定的結(jié)點(diǎn)為起點(diǎn),以用戶的意愿為主選擇遍歷的方式,以用戶的意愿為主看是否要推出程序。

代碼片段和文件信息
#define?MAX_NAME?3?//?頂點(diǎn)字符串的最大長度+1
?#define?MAX_VERTEX_NUM?50
?typedef?char?VertexType[MAX_NAME];?//?字符串類型
?typedef?int?QElemType;?//?隊(duì)列類型
#include
#include
#include?
#include?
#include?
#include?
using?namespace?std;
int?visite[MAX_VERTEX_NUM];?//?訪問標(biāo)志數(shù)組(全局量)
enum?VisitIf{unvisitedvisited};
?
?struct?EBox
?{
???VisitIf?mark;?//?訪問標(biāo)記
???int?ivexjvex;?//?該邊依附的兩個(gè)頂點(diǎn)的位置
???EBox?*ilink*jlink;?//?分別指向依附這兩個(gè)頂點(diǎn)的下一條邊
????};
?struct?VexBox
?{
???string?data;
???EBox?*firstedge;?//?指向第一條依附該頂點(diǎn)的邊
?};
?struct?AMLGraph
?{
???VexBox?adjmulist[MAX_VERTEX_NUM];
???int?vexnumedgenum;?//?無向圖的當(dāng)前頂點(diǎn)數(shù)和邊數(shù)
?};
?typedef?struct?QNode
?{
???QElemType?data;
???QNode?*next;
?}*QueuePtr;
?struct?linkQueue
?{
???QueuePtr?frontrear;?//?隊(duì)頭、隊(duì)尾指針
?};
int??CreateGraph(AMLGraph?&G);
int??LocateVex(AMLGraph?Gstring?u);
void?Display(AMLGraph?G);
void?MarkUnvizited(AMLGraph?G);
void?DFS(AMLGraph?Gint?v);
int?visit(string?v);
void?BFSTraverse(AMLGraph?Gint(*Visit)(string)int?v);
int?InitQueue(linkQueue?&Q);
int?DeQueue(linkQueue?&QQElemType?&e);
int?QueueEmpty(linkQueue?Q);
int?EnQueue(linkQueue?&QQElemType?e);
int?NextAdjVex(AMLGraph?Gstring?vstring?w);
int?FirstAdjVex(AMLGraph?Gstring?v);
string?GetVex(AMLGraph?Gint?v);
int??CreateGraph(AMLGraph?&G)
?{?
???int?ijk;
???string?vavb;
???EBox?*p;
???printf(“請輸入無向圖G的頂點(diǎn)數(shù)邊數(shù)(以逗號作為間隔):?“);
???scanf(“%d%d“&G.vexnum&G.edgenum);
???getchar();
???printf(“請輸入%d個(gè)頂點(diǎn)的值:\n“G.vexnum);
???for(i=0;i ???{
?????cin>>G.adjmulist[i].data;
?G.adjmulist[i].firstedge=NULL;
???}
???
???printf(“請順序輸入每條邊的兩個(gè)端點(diǎn)(以空格作為間隔):\n“);
???for(k=0;k ???{
????cin>>va>>vb;?
?????i=LocateVex(Gva);?//?一端
?????j=LocateVex(Gvb);?//?另一端
?????p=(EBox*)malloc(sizeof(EBox));
?????p->mark=unvisited;?//?設(shè)初值
?????p->ivex=i;
?????p->jvex=j;
?????p->ilink=G.adjmulist[i].firstedge;?//?插在表頭
?????G.adjmulist[i].firstedge=p;
?????p->jlink=G.adjmulist[j].firstedge;?//?插在表頭
?????G.adjmulist[j].firstedge=p;?
???}
???return?1;
?}
int?LocateVex(AMLGraph?Gstring?u)
?{?//?初始條件:?無向圖G存在u和G中頂點(diǎn)有相同特征
???//?操作結(jié)果:?若G中存在頂點(diǎn)u則返回該頂點(diǎn)在無向圖中位置;否則返回-1
???int?i;
???for(i=0;i ?????if(u==G.adjmulist[i].data)
???????return?i;
???return?-1;
?}
void?Display(AMLGraph?G)
?{?//?輸出無向圖的鄰接多重表G
???int?i;
???EBox?*p;
???MarkUnvizited(G);?//?置邊的訪問標(biāo)記為未被訪問
???printf(“%d個(gè)頂點(diǎn):\n“G.vexnum);
???for(i=0;i ?????cout< ???printf(“\n%d條邊:\n“G.edgenum);
???for(i=0;i ???{
?????p=G.adjmulist[i].firstedge;
?????while(p)
???????{
?????????if(p->ivex==i)?//?邊的i端與該頂點(diǎn)有關(guān)
{
?????????if(!p->mark)?//?只輸出一次
?????????{
???????????cout<jvex].data;
???????????p->mark=visited;
???????????printf(“\n“);
??????????}
?????????p=p->ilink;
????????
???????}
????????else???//?邊的j端與該頂點(diǎn)有關(guān)
???
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????514??2009-09-08?18:42??tu8\tu8.dsw
?????文件??????41984??2009-09-15?22:37??tu8\tu8.ncb
?????文件??????74752??2009-09-15?22:36??tu8\Debug\vc60.idb
?????文件?????110592??2009-09-15?22:36??tu8\Debug\vc60.pdb
?????文件?????186928??2009-09-08?18:48??tu8\Debug\tu8.pch
?????文件?????532537??2009-09-15?22:36??tu8\Debug\tu8.exe
?????文件????1106944??2009-09-15?22:36??tu8\Debug\tu8.pdb
?????文件?????150289??2009-09-15?22:36??tu8\Debug\8.obj
?????文件?????778116??2009-09-15?22:36??tu8\Debug\tu8.ilk
?????文件????????872??2009-09-15?22:36??tu8\tu8.plg
?????文件???????4246??2009-09-08?20:25??tu8\tu8.dsp
?????文件???????8725??2009-09-08?21:28??tu8\8.cpp
?????文件??????48640??2009-09-15?22:37??tu8\tu8.opt
?????目錄??????????0??2009-09-08?18:42??tu8\Debug
?????目錄??????????0??2009-09-08?18:42??tu8
-----------?---------??----------?-----??----
??????????????3045139????????????????????15
評論
共有 條評論