ʵÑé Îå ͼµÄ±éÀú¼°ÆäÓ¦ÓÃʵÏÖ
Ò»¡¢ÊµÑéÄ¿µÄ
1£®ÊìϤͼ³£ÓõĴ洢½á¹¹¡£
2£®ÕÆÎÕÔÚͼµÄÁÚ½Ó¾ØÕóºÍÁÚ½Ó±íÁ½ÖֽṹÉÏʵÏÖͼµÄÁ½ÖÖ±éÀú·½·¨ÊµÏÖ¡£ 3£®»áÓÃͼµÄ±éÀú½â¾ö¼òµ¥µÄʵ¼ÊÎÊÌâ¡£
¶þ¡¢ÊµÑéÄÚÈÝ
´Ó¼üÅÌÉÏÊäÈëͼµÄ¶¥µãºÍ±ßµÄÐÅÏ¢,½¨Á¢Í¼µÄÁÚ½Ó±í´æ´¢½á¹¹,È»ºóÒÔÉî¶ÈÓÅÏÈËÑË÷ºÍ¹ã¶ÈÓÅÏÈËÑË÷±éÀú¸Ãͼ,²¢Êä³öÆð¶ÔÓ¦µÄ±éÀúÐòÁÐ. ÊÔÉè¼Æ³ÌÐòʵÏÖÉÏÊöͼµÄÀàÐͶ¨ÒåºÍ»ù±¾²Ù×÷,Íê³ÉÉÏÊö¹¦ÄÜ¡£¸Ã³ÌÐò°üÀ¨Í¼ÀàÐÍÒÔ¼°Ã¿Ò»ÖÖ²Ù×÷µÄ¾ßÌåµÄº¯Êý¶¨ÒåºÍÖ÷º¯Êý
1 2 5 3 4 Ïà¹Ø³£Á¿¼°½á¹¹¶¨Ò壺
typedef int InfoType; typedef int QElemType; typedef char VertexType; #define MAX_VERTEX_NUM 20 #define MAXQSIZE 100 typedef struct ArcNode {
int adjvex; //¸Ã»¡ËùÖ¸ÏòµÄ¶¥µãµÄλÖà struct ArcNode *nextarc; //Ö¸ÏòÏÂÒ»Ìõ»¡µÄÖ¸Õë InfoType *info; //¸Ã»¡Ïà¹ØÐÅÏ¢µÄÖ¸Õë }ArcNode;
typedef struct VNode {
VertexType data; //¶¥µãÐÅÏ¢
struct ArcNode *firstarc; //Ö¸ÏòµÚÒ»ÌõÒÀ¸½¸Ã¶¥µãµÄ»¡µÄÖ¸
Õë
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct { AdjList vertices;
int vexnum, arcnum; //ͼµÄµ±Ç°¶¥µãºÍ»¡Êý
int kind; //ͼµÄÖÖÀà±êÖ¾ }ALGraph;
typedef struct Queue {
QElemType *base; int front; int rear; }Queue;
Éè¼ÆÏà¹Øº¯ÊýÉùÃ÷£º
int LocateVex(ALGraph &G, char &v)
ͼµÄÁÚ½Ó±í´´½¨£ºvoid CreateGraph(ALGraph &G)
Éî¶ÈÓÅÏÈËÑË÷£ºvoid DFS(ALGraph &G,int v,int *visited)
void DFSTraverse(ALGraph &G)
¹ã¶ÈÓÅÏÈËÑË÷£ºvoid BFSTraverse(ALGraph &G) ¶ÓÁУºint InitQueue(Queue &Q)
int EnQueue(Queue &Q,QElemType e) int DeQueue(Queue &Q,QElemType &e) int QueueEmpty(Queue &Q)
Èý¡¢Êý¾Ý½á¹¹ÓëºËÐÄËã·¨µÄÉè¼ÆÃèÊö
1.¶¨Î»
int LocateVex(ALGraph &G, char &v) {
int m;
for(m=0; m if(G.vertices[m].data==v) return m; } 2.ͼµÄ´´½¨ void CreateGraph(ALGraph &G) { int i=0,j=0,k; cout<<\ÇëÊäÈë¶¥µãµÄÊýÄ¿±ßµÃÊýÄ¿ \ cin>>G.vexnum>>G.arcnum; cout<<\ÇëÒÀ´ÎÊäÈë¸÷¶¥µãµÄÖµ£º\ for(i=0;i cin>>G.vertices[i].data; G.vertices[i].firstarc=NULL; } char sv,tv; cout<<\ÇëÒÀ´ÎÊäÈë¸÷±ßµÄʼµãºÍÖյ㣺\ for (k=0; k cout<<\ÇëÊäÈëµÚ\Ìõ±ßµÄʼµã£º\ cin>>sv; cout<<\ÇëÊäÈëµÚ\Ìõ±ßµÄÖյ㣺\ cin>>tv; i=LocateVex(G, sv); cout<<\ÇëÊäÈëµÚ\Ìõ±ßµÄʼµãµÄλÖãº\ j=LocateVex(G, tv); cout<<\ÇëÊäÈëµÚ\Ìõ±ßµÄÖÕµãµÄλÖãº\ ArcNode *p; p=(ArcNode *)malloc(sizeof(ArcNode)); if(!p) { cout<<\ } p->adjvex=j; p->nextarc=G.vertices[i].firstarc; p->info=NULL; G.vertices[i].firstarc=p; if(G.vertices[i].firstarc==NULL) cout<<\ } } 2.Éî¶ÈÓÅÏÈËÑË÷ void DFS(ALGraph &G,int v,int *visited) { int w; char z; visited[v]=1; cout< for(z=G.vertices[v].data;G.vertices[v].firstarc!=NULL; w=G.vertices[v].firstarc->adjvex, G.vertices[v].firstarc=G.vertices[v].firstarc->nextarc) if(visited[v]==0) DFS(G,w,visited); } void DFSTraverse(ALGraph &G) { int v; int visited[MAX_VERTEX_NUM]; for (v=0; v for (v=0; v DFS(G,v,visited); } 3.³õʼ»¯¶ÓÁÐ int InitQueue(Queue &Q) { Q.base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType)); if(!Q.base) { cout< Q.front=Q.rear=0; return 1; } 4.Èë¶Ó
Ïà¹ØÍÆ¼ö£º