邻接表的深度遍历
#include <iostream>
using namespace std;
const int v = 10;
int record[v]; //用来记录节点是否被访问过
char Ding[v]; // 用来记录顶点数据
struct Print
{
int date; //用来存放角标
struct Print *next;
};
Print *Array[v];
void Depth(int p)
{
cout<<Ding[Array[p]->date]; //将节点输出
record[p] = 0; //将输出的节点的标志变为0。(主函数里会将record全部初始化为1,1表示还未访问,0表示已访问).
Print *q = new Print;
q = Array[p]->next;
while(q!=NULL) //一直找到尾
{
if(record[q->date]!=0) //如果这个节点没被访问过,就递归这个函数
{
Depth(q->date);
}
else //否则看与我这个节点有关的下一个边
{
q = q->next;
}
}
}
int main()
{
int n,e,i,j,k;
cout << "顶点数和边数:";
cin>>n>>e;
Print *p,*q;
cout<<"输入顶点信息:";
for(i=0;i<n;i++)
{
cin>>Ding[i];
}
for(i=0;i<n;i++) //初始化
{
record[i] = 1;
Array[i] = new Print;
Array[i]->date = i;
Array[i]->next = NULL;
}
cout<<"请输入相临边:"<<endl;
for(i=0;i<e;i++) //构建邻接表
{
cin>>j>>k;
p = new Print;
p->date = Array[j]->date;
p->next = Array[k]->next;
Array[k]->next = p;
q = new Print;
q->date = Array[k]->date;
q->next = Array[j]->next;
Array[j]->next = q;
}
Depth(0);
return 0;
}
邻接表的广度遍历:
#include <iostream>
#include <queue>
using namespace std;
const int v = 10;
int record[v]; //和上面的作用一样
char Ding[v];
struct Print
{
int date;
struct Print *next;
};
Print *Array[v];
void Wedth(int p,int n)
{
queue<int> x; //用来存放节点角标
cout<<Ding[Array[p]->date];
record[p] = 0;
x.push(p); //让该节点入队
Print *q;
while(!x.empty())
{
p = x.front();
x.pop();
q = Array[p]->next;
while(q!=NULL) // 这步就是为了让与该节点有关的所有节点的角标入队
{
if(record[q->date]!=0) //如果没被访问过,就输出,然后把标志变为0,并入队
{
cout<<Ding[q->date];
record[q->date]=0;
x.push(q->date);
}
q = q->next; //如果不满足就看下一个节点
}
}
}
int main()
{
int n,e,i,j,k;
cout << "顶点数和边数:";
cin>>n>>e;
Print *p,*q;
cout<<"输入顶点信息:";
for(i=0;i<n;i++)
{
cin>>Ding[i];
}
for(i=0;i<n;i++)
{
record[i] = 1;
Array[i] = new Print;
Array[i]->date = i;
Array[i]->next = NULL;
}
cout<<"请输入相临边:"<<endl;
for(i=0;i<e;i++)
{
cin>>j>>k;
p = new Print;
p->date = Array[j]->date;
p->next = Array[k]->next;
Array[k]->next = p;
q = new Print;
q->date = Array[k]->date;
q->next = Array[j]->next;
Array[j]->next = q;
}
Wedth(0,n);
return 0;
}
我定义了很多全局变量,就是为了使用方便,但我不太清楚会不会影响程序。
由于刚学c++,只会一些简单的方法,所有要是方法可以改进或者代码有什么不对的地方,希望指出!