#include<iostream>
#include<string.h>
using namespace std;
int visit[10001];
int k;
typedef struct EdgeNode//边表结点
{
int adjvex;//结点下标
int weight;//结点权值
EdgeNode *next;//next指针
} Enode;
typedef struct VertexNode
{
int data;//顶点数
Enode *fristedge;
} Vnode,AdjList[1000];
struct Graph
{
AdjList adjlist;
int vexnum,edgenum;
};
void createALGraph(Graph *G)
{
int v1,v2;
Enode *e;
cin>>G->vexnum>>G->edgenum>>k;
for(int i=1; i<=G->vexnum; i++)
{
G->adjlist[i].data=i;
G->adjlist[i].fristedge=NULL;
}
for(int i=1; i<=G->edgenum; i++)
{
cin>>v1>>v2;
e=new EdgeNode;
e->adjvex=v2;
e->next=G->adjlist[v1].fristedge;
G->adjlist[v1].fristedge=e;
e=new EdgeNode;
e->adjvex=v1;
e->next=G->adjlist[v2].fristedge;
G->adjlist[v2].fristedge=e;
}
}
void DFS(Graph *G,int n)//邻接表
{
Enode *p;
visit[n]=1;
cout<<G->adjlist[n].data<<" ";
p=G->adjlist[n].fristedge;
while(p)
{
if(!visit[p->adjvex])
{
DFS(G,p->adjvex);
}
p=p->next;
}
}
void BFS(Graph *G,int n)
{
Enode *p;
queue<int>q;
visit[n]=1;
p=G->adjlist[n].fristedge;
q.push(G->adjlist[n].data);
while(!q.empty())
{
cout<<q.front()<<" ";
q.pop();
while(p)
{
if(visit[p->adjvex]==0)
{
q.push(p->adjvex);
visit[p->adjvex]=1;
}
p=p->next;
}
}
}
int main()
{
Graph *G;
G=new Graph;
createALGraph(G);
memset(visit,0,sizeof(visit));
for(int i=1; i<=G->vexnum; i++)
{
if(visit[i]==0)
DFS(G,i);
//BFS(G,i);
}
return 0;
}
邻接矩阵:
void DFS(int i,int k)
{
visit[i]=1;
cout<<i<<" ";
for(int j=0;j<k;j++)
{
if(visit[j]==0&&a[i][j]!=0)
DFS(j,k);
}
}