路径搜索文档格式.docx
《路径搜索文档格式.docx》由会员分享,可在线阅读,更多相关《路径搜索文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
classsequeue
public:
sequeue(){};
~sequeue(){};
voidsetnull();
voidenqueue(Tx);
Tdequeue();
intempty();
private:
Tdata[maxsize];
intfront,rear;
voidsequeue<
T>
:
setnull()
front=rear=maxsize-1;
}
enqueue(Tx)
if((rear+1)%maxsize==front)
cout<
<
"
error"
endl;
rear=(rear+1)%maxsize;
data[rear]=x;
Tsequeue<
dequeue()
if(front==rear)
xiayi"
front=(front+1)%maxsize;
returndata[front];
intsequeue<
empty()
returnfront==rear?
1:
0;
classALGraph
friendsequeue;
ALGraph(){};
voidALGraph1(intn,inte);
~ALGraph(){};
voidDFSL(inti,intj,intk);
voidBFSL(inti,intj);
voidchoose();
vexnode<
ga[maxsize];
intn,e;
intpath[maxsize],visited[maxsize];
voidALGraph<
ALGraph1(intvexnum,intedgenum)
inti,j,k;
edgenode*s;
n=vexnum;
e=edgenum;
cout<
请输入结点:
for(i=0;
i<
n;
i++)
{
cin>
>
ga[i].vertex;
ga[i].link=0;
visited[i]=0;
}
请输入各条边:
for(k=0;
k<
e;
k++)
i>
j;
s=newedgenode;
s->
adjvex=j;
next=ga[i-1].link;
ga[i-1].link=s;
DFSL(inti,intj,intk)
edgenode*p;
intm;
path[k++]=i;
visited[i-1]=1;
p=ga[i-1].link;
if(path[k-1]==j)
for(m=0;
m<
k;
m++)
cout<
path[m]<
->
;
visited[j-1]=0;
k--;
while(p!
=0)
if(!
visited[p->
adjvex-1])
DFSL(p->
adjvex,j,k);
p=p->
next;
visited[path[k]-1]=0;
template<
BFSL(inti,intj)
intm,pa[maxsize];
for(intx=0;
x<
x++)
visited[x]=0;
treenode<
tree[maxsize];
sequeue<
Q;
Q.setnull();
Q.enqueue(i);
while(!
Q.empty())
m=Q.dequeue();
tree[m-1].ver=m;
p=ga[m-1].link;
while(p)
{
if(!
{
//visited[p->
adjvex-1]=1;
Q.enqueue(p->
adjvex);
tree[p->
adjvex-1].parent=m-1;
adjvex-1].ver=p->
adjvex;
if(tree[p->
adjvex-1].ver==j)
{
intk=0;
intl=j-1;
while(l>
{
pa[k++]=tree[l].ver;
l=tree[l].parent;
}
for(--k;
k>
=0;
k--)
cout<
pa[k]<
cout<
//visited[j-1]=0;
}
}
p=p->
}
choose()
chara;
intk=0,i,j;
请选择查找方式:
D:
(深度)、B:
(广度)!
cin>
a;
请输入起点和终点:
switch(a)
case'
D'
DFSL(i,j,k);
choose();
B'
BFSL(i,j);
voidmain()
ALGraph<
int>
G;
intvexnum,edgenum;
请输入结点数和边数:
vexnum>
edgenum;
G.ALGraph1(vexnum,edgenum);
G.choose();
运行结果示意图: