c#)图的深度优先搜索和广度优先搜索算法的实现

求源代码,c#语言!!!... 求源代码,c#语言!!! 展开
 我来答
帘动觅残红
2011-11-30 · 超过25用户采纳过TA的回答
知道答主
回答量:84
采纳率:0%
帮助的人:67.4万
展开全部
#include "exam8-2.cpp"
void BFS(ALGraph *G,int v)
{
ArcNode *p;
int queue[MAXV],front=0,rear=0; //定义循环队列并初始化
int visited[MAXV]; //定义存放结点的访问标志的数组
int w,i;
for (i=0;i<G->n;i++) visited[i]=0; //访问标志数组初始化
printf("%2d",v); //输出被访问顶点的编号
visited[v]=1; //置已访问标记
rear=(rear+1)%MAXV;
queue[rear]=v; //v进队
while (front!=rear) //若队列不空时循环
{ front=(front+1)%MAXV;
w=queue[front]; //出队并赋给w
p=G->adjlist[w].firstarc; //找与顶点w邻接的第一个顶点
while (p!=NULL)
{ if (visited[p->adjvex]==0) //若当前邻接顶点未被访问
{ printf("%2d",p->adjvex); //访问相邻顶点
visited[p->adjvex]=1; //置该顶点已被访问的标志
rear=(rear+1)%MAXV; //该顶点进队
queue[rear]=p->adjvex;
}
p=p->nextarc; //找下一个邻接顶点
}
}
printf("\n");
}
void main()
{
int i,j;
MGraph g;
ALGraph *G;
int A[MAXV][5]={
{0,1,0,1,1},
{1,0,1,1,0},
{0,1,0,1,1},
{1,1,1,0,1},
{1,0,1,1,0}};
g.n=5;g.e=16;
for (i=0;i<g.n;i++)
for (j=0;j<g.n;j++)
g.edges[i][j]=A[i][j];
G=(ALGraph *)malloc(sizeof(ALGraph));
MatToList(g,G);
printf(" 邻接表:\n");DispAdj(G);
printf("广度优先序列:");BFS(G,2);printf("\n");
}
以上为广度优先搜索遍历

#include "exam8-2.cpp"
int visited[MAXV];
void DFS(ALGraph *G,int v)
{
ArcNode *p;
visited[v]=1; //置已访问标记
printf("%d ",v); //输出被访问顶点的编号
p=G->adjlist[v].firstarc; //p指向顶点v的第一条弧的弧头结点
while (p!=NULL)
{
if (visited[p->adjvex]==0) //若p->adjvex顶点未访问,递归访问它
DFS(G,p->adjvex);
p=p->nextarc; //p指向顶点v的下一条弧的弧头结点
}
}
void main()
{
int i,j;
MGraph g;
ALGraph *G;
int A[MAXV][5]={
{0,1,0,1,1},
{1,0,1,1,0},
{0,1,0,1,1},
{1,1,1,0,1},
{1,0,1,1,0}};
g.n=5;g.e=16;
for (i=0;i<g.n;i++)
for (j=0;j<g.n;j++)
g.edges[i][j]=A[i][j];
G=(ALGraph *)malloc(sizeof(ALGraph));
MatToList(g,G);
printf(" 邻接表:\n");DispAdj(G);
for (i=0;i<MAXV;i++)
visited[i]=0;
printf("深度优先序列:");DFS(G,2);printf("\n");
}

这是深度优先搜索遍历。

具体还需自己懂后创新
更多追问追答
追问
你写这么多,我不采纳又过意不去,可是我是要c#的,不是c。我采纳了就更加过意不去了
追答
额,这个是我很久前做实验的源代码,只是复制粘贴了下,你不用过意不去的
examaster
2011-12-05 · TA获得超过2510个赞
知道小有建树答主
回答量:453
采纳率:100%
帮助的人:384万
展开全部
c#)图的深度优先搜索
publicvoidDFSTraverse()//深度优先遍历
{
InitVisited();//将visited标志全部置为false
DFS(items[0]);//从第一个顶点开始遍历
}
privatevoidDFS(Vertex<T>v)//使用递归进行深度优先遍历
{
v.visited=true;//将访问标志设为true
Console.Write(v.data+"");//访问
Nodenode=v.firstEdge;
while(node!=null)//访问此顶点的所有邻接点
{ //如果邻接点未被访问,则递归访问它的边
if(!node.adjvex.visited)
{
DFS(node.adjvex);//递归
}
node=node.next;//访问下一个邻接点
}
}
privatevoidInitVisited()//初始化visited标志
{
foreach(Vertex<T>vinitems)
{
v.visited=false;//全部置为false
}
}

c#)图的广度优先搜索
publicvoidBFSTraverse()//广度优先遍历
{
InitVisited();//将visited标志全部置为false
BFS(items[0]);//从第一个顶点开始遍历
}
privatevoidBFS(Vertex<T>v)//使用队列进行广度优先遍历
{ //创建一个队列
Queue<Vertex<T>>queue=newQueue<Vertex<T>>();
Console.Write(v.data+"");//访问
v.visited=true;//设置访问标志
queue.Enqueue(v);//进队
while(queue.Count>0)//只要队不为空就循环
{
Vertex<T>w=queue.Dequeue();
Nodenode=w.firstEdge;
while(node!=null)//访问此顶点的所有邻接点
{ //如果邻接点未被访问,则递归访问它的边
if(!node.adjvex.visited)
{
Console.Write(node.adjvex.data+"");//访问
node.adjvex.visited=true;//设置访问标志
queue.Enqueue(node.adjvex);//进队
}
node=node.next;//访问下一个邻接点
}
}
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式