版权声明:欢迎大佬批评指正!O(∩_∩)O https://blog.csdn.net/wyh1618/article/details/85037741
//邻接表
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define INF 999
using namespace std;
typedef struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
int weight;
}ArcNode;
typedef struct VNode
{
ArcNode *firstarc;
}VNode;
typedef struct
{
VNode adjlist[100];
int n,e;
}AdjGraph;
int vis[99]={0};
void CreatAdj(AdjGraph *&G,int A[6][10],int n,int e)
{
int i,j,k;
ArcNode *p;
G=(AdjGraph *)malloc(sizeof(AdjGraph));
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(A[i][j]!=0&&A[i][j]!=INF)
{
p=(ArcNode *)malloc(sizeof(ArcNode));
p->adjvex=j;
p->weight=A[i][j];
p->nextarc=G->adjlist[i].firstarc;
G->adjlist[i].firstarc=p;
}
}
}
G->n=n;
G->e=e;
}
void DispAdj(AdjGraph *G)
{
ArcNode *p;
for(int i=0;i<G->n;i++)
{
p=G->adjlist[i].firstarc;
printf("%2d:",i);
while(p!=NULL)
{
printf("%2d[%d]->",p->adjvex,p->weight);
p=p->nextarc;
}
printf("^\n");
}
}
void Destory(AdjGraph *&G)
{
int i;
ArcNode *pre,*p;
for(i=0;i<G->n;i++)
{
pre=G->adjlist[i].firstarc;
if(pre!=NULL)
{
p=pre->nextarc;
while(p!=NULL)
{
free(pre);
pre=p;
p=p->nextarc;
}
free(pre);
}
}
free(G);
}
void dfs(AdjGraph *G,int v)
{
cout<<" "<<v<<endl;
vis[v] = 1;
ArcNode *p;
p = G->adjlist[v].firstarc;
while(p!=NULL)
{
if(vis[p->adjvex]==0)
{
dfs(G,p->adjvex);
}
p = p->nextarc;
}
}
void bfs(AdjGraph *G,int v)
{
int que[99],fron = 0,rear = 0;
ArcNode *p;
memset(vis,0,sizeof(vis));
int w , i;
vis[v] = 1;
rear+=1;
que[rear] = v;
cout<<v<<endl;
while(fron!=rear)
{
fron++;
w = que[fron];
p = G->adjlist[w].firstarc;
while(p!=NULL)
{
if(vis[p->adjvex]==0)
{
cout<<p->adjvex<<endl;
vis[p->adjvex]=1;
rear++;
que[rear] = p->adjvex;
}
p = p->nextarc;
}
}
}
int main()
{
memset(vis,0,sizeof(vis));
AdjGraph *G;
int A[6][10]={
{0,5,INF,7,INF,INF}, {INF,0,4,INF,INF,INF},
{8,INF,0,INF,INF,9}, {INF,INF,5,0,INF,6},
{INF,INF,INF,5,0,INF}, {3,INF,INF,INF,1,0}};
CreatAdj(G,A,6,10);
for(int i=0;i<6;i++){
for(int j=0;j<10;j++){
cout<<A[i][j]<<" ";
}
cout<<endl;
}
DispAdj(G);
cout<<endl<<"dfs"<<endl;
dfs(G,0);
cout<<"BFS"<<endl;
bfs(G,0);
Destory(G);
return 0;
}