图的邻接矩阵、邻接表和遍历

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.图的邻接矩阵和遍历

#include

const int n=8;

const int e=15;

#define elemtype int

bool visited[n+1];

class graph

{

public:

elemtype v[n+1];

int arcs[n+1][n+1];

void creatadj()

{

int i,j,k;

cout<<"请输入"<

for (k=1;k<=n;k++)

cin>>v[k];

for(i=1;i<=n; i++)

for(j=1;j<=n;j++)

arcs[i][j]=0;

for(k=1;k<=e;k++)

{

cout<<"请输入第"<

cin>>i>>j;

cout<

arcs[i][j]=1;

arcs[j][i]=1;

}

}

void dfs(int i)

{

int j;

cout<

visited[i]=true;

for(j=1;j<=n;j++)

if((arcs[i][j]==1)&&(!visited[j]))

dfs(j);

}

void bfs(int i)

{

int q[n+1];

int f,r,j;

f=r=0;

cout<

visited[i]=true;

r++;q[r]=i;

while(f

{

f++;i=q[f];

for(j=1;j<=n;j++)

if((arcs[i][j]==1)&&(!visited[j]))

{

cout<

visited[j]=true;

r++;q[r]=j;

}

}

}

};

void main()

{

int i,j;graph g;

int yn=1;

g.creatadj();

for(i=1;i<=n;i++)

{

for(j=1;j<=n;j++)

cout<

cout<

}

while(yn==1)

{

for(i=1;i<=n;i++)

visited[i]=false;

cout<<"请输入深度优先搜索开始访问的顶点";

cin>>i;

cout<

cout<<"从"<

g.dfs(i);

cout<

cin>>yn;

}

yn=1;

while(yn==1)

{

for(i=1;i<=n;i++)

visited[i]=false;

cout<<"请输入广度优先搜索开始访问的顶点";

cin>>i;

cout<

cout<<"从"<

g.bfs(i);

cout<

cin>>yn;

}

}

二.图的邻接表和遍历

#include

const int n=8;

const int e=15;

typedef int elemtype;

bool visited[n+1];

class link

{

public:

elemtype data;

link *next;

};

class GRAPH

{

public:

link a[n+1];

void creatlink()

{

int i,j,k;

link *s;

for(i=1;i<=n;i++)

{

a[i].data=i;

a[i].next=NULL;

}

for(k=1;k<=e;k++)

{

cout<<"请输入一条边";

cin>>i>>j;

s=new link;

s->data=j;

s->next=a[i].next;

a[i].next=s;

s=new link;

s->data=i;

s->next=a[j].next;

a[j].next=s;

}

}

void dfsl(int i)

{

link *p;

cout<

visited[i]=true;

p=a[i].next;

while(p!=NULL)

{

if (!visited[p->data])

dfsl(p->data);

p=p->next;

}

}

void bfsl(int i)

{

int q[n+1];

int f,r;

link *p;

f=r=0;

cout<

visited[i]=true;

r++;q[r]=i;

while(f

{

f++;i=q[f];

p=a[i].next;

while(p!=NULL)

{

if (!visited[p->data])

{

cout<data].data<<"";

visited[p->data]=true;

r++;q[r]=p->data;

相关文档
最新文档