µ±Ç°Î»ÖãºÊ×Ò³ > Êý¾Ý½á¹¹ÊµÑ鱨¸æ- ´ð°¸»ã×Ü
ʵÑé3
ʵÑéÌâÄ¿£ºÍ¼µÄ±éÀú²Ù×÷
ʵÑéÄ¿µÄ£º
ÕÆÎÕÓÐÏòͼºÍÎÞÏòͼµÄ¸ÅÄî£»ÕÆÎÕÁÚ½Ó¾ØÕóºÍÁÚ½ÓÁ´±í½¨Á¢Í¼µÄ´æ´¢½á¹¹£»ÕÆÎÕDFS¼°BFS¶ÔͼµÄ±éÀú²Ù×÷£»Á˽âͼ½á¹¹ÔÚÈ˹¤ÖÇÄÜ¡¢¹¤³ÌµÈÁìÓòµÄ¹ã·ºÓ¦Óá£
ʵÑéÒªÇó£º
²ÉÓÃÁÚ½Ó¾ØÕóºÍÁÚ½ÓÁ´±í×÷ΪͼµÄ´æ´¢½á¹¹£¬Íê³ÉÓÐÏòͼºÍÎÞÏòͼµÄDFSºÍBFS²Ù×÷¡£
ʵÑéÖ÷Òª²½Ö裺
Éè¼ÆÒ»¸öÓÐÏòͼºÍÒ»¸öÎÞÏòͼ£¬ÈÎѡһÖÖ´æ´¢½á¹¹£¬Íê³ÉÓÐÏòͼºÍÎÞÏòͼµÄDFS£¨Éî¶ÈÓÅÏȱéÀú£©ºÍBFS£¨¹ã¶ÈÓÅÏȱéÀú£©µÄ²Ù×÷¡£
1£® ÁÚ½Ó¾ØÕó×÷Ϊ´æ´¢½á¹¹ #include\#include\
#define MaxVertexNum 100 //¶¨Òå×î´ó¶¥µãÊý typedef struct{
char vexs[MaxVertexNum]; //¶¥µã±í
int edges[MaxVertexNum][MaxVertexNum]; //ÁÚ½Ó¾ØÕ󣬿ɿ´×÷±ß±í int n,e; //ͼÖеĶ¥µãÊýnºÍ±ßÊýe }MGraph; //ÓÃÁÚ½Ó¾ØÕó±íʾµÄͼµÄÀàÐÍ //=========½¨Á¢ÁÚ½Ó¾ØÕó======= void CreatMGraph(MGraph *G) {
int i,j,k; char a;
printf(\
scanf(\ÊäÈë¶¥µãÊýºÍ±ßÊý scanf(\ printf(\ for(i=0;i
scanf(\
G->vexs[i]=a; //¶ÁÈë¶¥µãÐÅÏ¢£¬½¨Á¢¶¥µã±í }
for(i=0;i
G->edges[i][j]=0; //³õʼ»¯ÁÚ½Ó¾ØÕó printf(\
for(k=0;k
G->edges[i][j]=1;
G->edges[j][i]=1; //ÈôΪÎÞÏòͼ£¬¾ØÕóΪ¶Ô³Æ¾ØÕó£»Èô½¨Á¢ÓÐÏòͼ£¬È¥µô¸ÃÌõÓï¾ä } }
//=========¶¨Òå±êÖ¾ÏòÁ¿£¬ÎªÈ«¾Ö±äÁ¿======= typedef enum{FALSE,TRUE} Boolean; Boolean visited[MaxVertexNum];
//========DFS£ºÉî¶ÈÓÅÏȱéÀúµÄµÝ¹éËã·¨====== void DFSM(MGraph *G,int i)
{ //ÒÔViΪ³ö·¢µã¶ÔÁÚ½Ó¾ØÕó±íʾµÄͼG½øÐÐDFSËÑË÷£¬ÁÚ½Ó¾ØÕóÊÇ0£¬1¾ØÕó int j;
printf(\·ÃÎʶ¥µãVi visited[i]=TRUE; //ÖÃÒÑ·ÃÎʱêÖ¾
for(j=0;j
DFSM(G,j); //£¨Vi£¬Vj£©¡ÊE£¬ÇÒVjδ·ÃÎʹý£¬¹ÊVjΪгö·¢µã }
void DFS(MGraph *G) {
int i;
for(i=0;i
visited[i]=FALSE; //±êÖ¾ÏòÁ¿³õʼ»¯ for(i=0;i
if(!visited[i]) //Viδ·ÃÎʹý
DFSM(G,i); //ÒÔViΪԴµã¿ªÊ¼DFSËÑË÷ }
//===========BFS£º¹ã¶ÈÓÅÏȱéÀú======= void BFS(MGraph *G,int k)
{ //ÒÔVkΪԴµã¶ÔÓÃÁÚ½Ó¾ØÕó±íʾµÄͼG½øÐйã¶ÈÓÅÏÈËÑË÷ int i,j,f=0,r=0;
int cq[MaxVertexNum]; //¶¨Òå¶ÓÁÐ for(i=0;i
visited[i]=FALSE; //±êÖ¾ÏòÁ¿³õʼ»¯ for(i=0;i
cq[i]=-1; //¶ÓÁгõʼ»¯ printf(\·ÃÎÊÔ´µãVk visited[k]=TRUE;
cq[r]=k; //VkÒÑ·ÃÎÊ£¬½«ÆäÈë¶Ó¡£×¢Ò⣬ʵ¼ÊÉÏÊǽ«ÆäÐòºÅÈë¶Ó while(cq[f]!=-1) { //¶Ó·Ç¿ÕÔòÖ´ÐÐ i=cq[f]; f=f+1; //Vf³ö¶Ó
for(j=0;j
if(G->edges[i][j]==1 && !visited[j]) { //Vjδ·ÃÎÊ printf(\·ÃÎÊVj visited[j]=TRUE;
r=r+1; cq[r]=j; //·ÃÎʹýVjÈë¶Ó } } }
//==========main===== void main() {
int i; MGraph *G;
G=(MGraph *)malloc(sizeof(MGraph)); //ΪͼGÉêÇëÄÚ´æ¿Õ¼ä CreatMGraph(G); //½¨Á¢ÁÚ½Ó¾ØÕó printf(\
DFS(G); //Éî¶ÈÓÅÏȱéÀú printf(\
printf(\
BFS(G,3); //ÒÔÐòºÅΪ3µÄ¶¥µã¿ªÊ¼¹ã¶ÈÓÅÏȱéÀú printf(\}
2£® ÁÚ½ÓÁ´±í×÷Ϊ´æ´¢½á¹¹ #include\#include\
#define MaxVertexNum 50 //¶¨Òå×î´ó¶¥µãÊý typedef struct node{ //±ß±í½áµã int adjvex; //ÁÚ½ÓµãÓò struct node *next; //Á´Óò }EdgeNode;
typedef struct vnode{ //¶¥µã±í½áµã char vertex; //¶¥µãÓò EdgeNode *firstedge; //±ß±íÍ·Ö¸Õë }VertexNode;
typedef VertexNode AdjList[MaxVertexNum]; //AdjListÊÇÁÚ½Ó±íÀàÐÍ typedef struct {
AdjList adjlist; //ÁÚ½Ó±í
int n,e; //ͼÖе±Ç°¶¥µãÊýºÍ±ßÊý } ALGraph; //ͼÀàÐÍ //=========½¨Á¢Í¼µÄÁÚ½Ó±í======= void CreatALGraph(ALGraph *G) {
int i,j,k; char a;
EdgeNode *s; //¶¨Òå±ß±í½áµã
printf(\
scanf(\¶ÁÈë¶¥µãÊýºÍ±ßÊý
scanf(\
printf(\
for(i=0;i
scanf(\
G->adjlist[i].vertex=a; //¶ÁÈë¶¥µãÐÅÏ¢ G->adjlist[i].firstedge=NULL; //±ß±íÖÃΪ¿Õ±í }
printf(\ for(k=0;k
scanf(\¶ÁÈë±ß£¨Vi£¬Vj£©µÄ¶¥µã¶ÔÐòºÅ s=(EdgeNode *)malloc(sizeof(EdgeNode)); //Éú³É±ß±í½áµã s->adjvex=j; //ÁÚ½ÓµãÐòºÅΪj s->next=G->adjlist[i].firstedge;
G->adjlist[i].firstedge=s; //½«Ð½áµã*S²åÈë¶¥µãViµÄ±ß±íÍ·²¿ s=(EdgeNode *)malloc(sizeof(EdgeNode));
s->adjvex=i; //ÁÚ½ÓµãÐòºÅΪi s->next=G->adjlist[j].firstedge;
G->adjlist[j].firstedge=s; //½«Ð½áµã*S²åÈë¶¥µãVjµÄ±ß±íÍ·²¿ } }
//=========¶¨Òå±êÖ¾ÏòÁ¿£¬ÎªÈ«¾Ö±äÁ¿======= typedef enum{FALSE,TRUE} Boolean; Boolean visited[MaxVertexNum];
//========DFS£ºÉî¶ÈÓÅÏȱéÀúµÄµÝ¹éËã·¨====== void DFSM(ALGraph *G,int i)
{ //ÒÔViΪ³ö·¢µã¶ÔÁÚ½ÓÁ´±í±íʾµÄͼG½øÐÐDFSËÑË÷ EdgeNode *p;
printf(\·ÃÎʶ¥µãVi visited[i]=TRUE; //±ê¼ÇViÒÑ·ÃÎÊ
p=G->adjlist[i].firstedge; //È¡Vi±ß±íµÄÍ·Ö¸Õë
while(p) { //ÒÀ´ÎËÑË÷ViµÄÁÚ½ÓµãVj£¬ÕâÀïj=p->adjvex
if(! visited[p->adjvex]) //ÈôVjÉÐδ±»·ÃÎÊ
DFSM(G,p->adjvex); //ÔòÒÔVjΪ³ö·¢µãÏò×ÝÉîËÑË÷
p=p->next; //ÕÒViµÄÏÂÒ»¸öÁÚ½Óµã } }
void DFS(ALGraph *G) {
int i;
for(i=0;i
visited[i]=FALSE; //±êÖ¾ÏòÁ¿³õʼ»¯ for(i=0;i
if(!visited[i]) //Viδ·ÃÎʹý
¹²·ÖÏí92ƪÏà¹ØÎĵµ