// g1.cpp : 定义控制台应用程序的入口点。
//
#include <stdio.h>
#include <stdlib.h>
#define fileName "book.txt"
#define ROWS 10
#define INFI 10000
#define NODES 6
typedef struct Node
{
bool isVist;
char name;
}Node;
typedef struct
{
Node ver[NODES];
int arc[NODES][NODES];
int vernum;
int arcnum;
int kind;
}AdjMatrix;
typedef struct
{
int que[20];
int top;
int tail;
}Que;
void EnterQue(Que *Q,int v)
{
Q->que[Q->tail]=v;
Q->tail=(Q->tail++)%10;
}
void PopQue(Que *Q,int *v)
{
*v=Q->que[Q->top];
Q->top=(Q->top++)%10;
}
void InitQue(Que *Q)
{
int i=10;
for(i=0;i<20;i++)
Q->que[i]=0;
Q->tail=0;
Q->top=0;
}
bool isEmpty(Que *Q)
{
if(Q->tail==Q->top)
return true;
else
return false;
}
typedef int length;
length dest[6];
char path[6][6];
int p[6];
int flg[6];
void createG(AdjMatrix *G);
void visit(AdjMatrix *G,int v);
int Get(AdjMatrix *G,char c);
int GetNextNode(AdjMatrix *G,int v);
void BreathFristSearch(AdjMatrix *G,int v);
static int count=0;
void main(int argc, char* argv[])
{
int j;
AdjMatrix G;
createG(&G);
DepFristSearch(&G,0);
//BreathFristSearch(&G,0);
// for(j=0;j<6;j++)
// printf("到%c的距离为%d,路径为%s\n",G.ver[j].name,dest[j],path[j]);
printf("一共调用%d次",count);
}
void initdest(AdjMatrix *G,length *des,char start)
{
int i,j;
int k=Get(G,start);
for(i=0;i<6;i++)
if(G->arc[k][i]!=INFI)
des[i]=G->arc[k][i];
else
des[i]=INFI;
for(i=0;i<6;i++)
for(j=0;j<6;j++)
path[i][j]='\0';
for(i=0;i<6;i++)
{
flg[i]=1;
p[i]=0;
if(G->arc[k][i]!=INFI)
{
path[i][0]=start;
path[i][1]=G->ver[i].name;
p[i]=1;
}
}
}
void createG(AdjMatrix *G)
{
char a,b;
int x,y,num,i,j,power;
for(i=0;i<6;i++)
{
G->ver[i].isVist=false;
scanf("%c",&(G->ver[i].name));
}
for(i=0;i<6;i++)
for(j=0;j<6;j++)
G->arc[i][j]=INFI;
int row;
FILE * infile;
if ((infile = fopen("C:\\Users\\hp\\Desktop\\g.txt", "r")) == NULL)
{
fprintf(stderr, "Could not open data file.\n");
exit(EXIT_FAILURE);
}
for (row = 0; row < ROWS; row++)
{
fscanf(infile, "%c,%c,%d\n", &a, &b,&power);
printf("%c,%c,%d\n",a,b,power);
x=Get(G,a);
y=Get(G,b);
G->arc[x][y]=power;
G->arc[y][x]=power;
}
if (ferror(infile))
{
fprintf(stderr, "Error getting data from file.\n");
exit(EXIT_FAILURE);
}
}
void DepFristSearch(AdjMatrix *G,int v)
{
count++;
visit(G,v);
G->ver[v].isVist=true;
int w=GetNextNode(G,v);
while(w!=-1)
{
if(w!=-1)
DepFristSearch(G,w);
w=GetNextNode(G,v);
}
}
int GetNextNode(AdjMatrix *G,int v)
{
int j=-1,i;
for(i=0;i<10;i++)
if(G->arc[v][i]!=INFI&&G->ver[i].isVist==false&&i!=v)
{
j=i;
break;
}
return j;
}
void visit(AdjMatrix *G,int v)
{
printf("访问%c\n",G->ver[v].name);
}
int Get(AdjMatrix *G,char c)
{
int i;
for(i=0;i<10;i++)
if(G->ver[i].name==c)
return i;
return -1;
}
void BreathFristSearch(AdjMatrix *G,int v)
{
int lev=1;
visit(G,v);
G->ver[v].isVist=true;
Que Q1,Q2;
InitQue(&Q1);
InitQue(&Q2);
EnterQue(&Q1,v);
EnterQue(&Q2,lev);
int w,temp;
while(!isEmpty(&Q1))
{
PopQue(&Q1,&w);
PopQue(&Q2,&lev);
temp=GetNextNode(G,w);
while(temp!=-1)
{
if(lev<4)
{
visit(G,temp);
G->ver[temp].isVist=true;
EnterQue(&Q1,temp);
EnterQue(&Q2,lev+1);
temp=GetNextNode(G,w);
}
}
}
}
图的深度优先遍历和广度优先遍历实现
原文作者:数据结构之图
原文地址: https://blog.csdn.net/my_et/article/details/8853509
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/my_et/article/details/8853509
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。