回 帖 发 新 帖 刷新版面

主题:[讨论]邻接表的广度优先搜索

今天写了一个基于邻接表的广度优先搜索算法,可是在我标注的地方老是出错,请高手赐教
#include<iostream>
using namespace std;
#define Max 10
typedef struct ArcNode//邻接表结构
{
    int  adjvertex; /*与弧相关联的另一个节点的编号*/
    struct ArcNode *nextarc;/*下一个同弧尾的弧*/
}ArcNode;
typedef struct VertexNode/*头节点*/
{
    int data;/*顶点数据*/
    ArcNode *firstarc; /*以此顶点为弧尾的第一个弧(表节点)的指针*/
}VertexNode;
typedef struct
{
    VertexNode  vertex[Max];
    int vexnum,arcnum;
}AdjList;
int locate(AdjList &G,int v)
{
    int i;
    for(i=0;i<G.vexnum;i++)
    {
        if(G.vertex[i].data==v)
            return i;  
    }
}
void Create(AdjList &G)
{
    int i,j,m,n;
    int v1,v2;
    ArcNode *p;
    cout<<"请输入节点数和弧条数"<<endl;
    cin>>G.vexnum>>G.arcnum;
    for(i=0;i<G.vexnum;i++)
    {
        cout<<"请输入节点序号(不能重复)"<<endl;
        cin>>G.vertex[i].data;
        G.vertex[i].firstarc=NULL;
    }
    for(i=0;i<G.arcnum;i++)
    {
        cout<<"请输入每条边的两个节点"<<endl;
        cin>>v1;
        m=locate(G,v1);
        cin>>v2;
        n=locate(G,v2);
        if((m<0)||(n<0))
        {
            cout<<"你的输入有误,请重新输入"<<endl;//问题就出在这里,我每次输入两个顶点时,都会出现这句话
            i--;
        } 
        else
        {
           p=(ArcNode*)malloc(sizeof(ArcNode));/*此处建立的是无向图*/
           p->adjvertex=n;
           p->nextarc=G.vertex[m].firstarc;
           G.vertex[m].firstarc=p;
           p=(ArcNode*)malloc(sizeof(ArcNode));
           p->adjvertex=m;
           p->nextarc=G.vertex[n].firstarc;
           G.vertex[n].firstarc=p;
        }
    }
}
int Firstadjvex(AdjList &G,int v)
{
    ArcNode *p=G.vertex[v].firstarc;
    if(p!=NULL)
        return p->adjvertex;
    else
        return -1;
}
int Nextadjvex(AdjList &G,int v,int w)
{
    ArcNode *p=G.vertex[v].firstarc;
    while(p!=NULL&&p->adjvertex!=w)
    {
        p=p->nextarc;
    }
    if(p!=NULL&&p->nextarc!=NULL)
        return p->nextarc->adjvertex;
    else
        return -1;
}
int visited[10];
void BFS(AdjList &G,int v)
{
    cout<<v<<endl;
    visited[v]=1;
    int w;
    int rear=0,front=0;
    int queue[10];
    queue[rear]=v;
    rear++;
    while(rear!=front)
    {
        w=queue[front];
        w=Firstadjvex(G,v);
        while(w!=-1)
        {
            if(!visited[w])
            {
                cout<<w<<endl;
                visited[w]=1;
                queue[rear]=w;
                rear++;
            }
            w=Nextadjvex(G,v,w);
        }
    }
}
void main()
{
    int v;
    AdjList G;
    Create(G);
    cout<<"请输入你想查找的第一个节点"<<endl;
    cin>>v;
    cout<<"广度优先搜索为"<<endl;
    BFS(G,v);
}

回复列表 (共2个回复)

沙发

你好.我是全职网赚工作者.
如果你有时间有电脑.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ908889846

板凳

寻找一直寻找机会的人!
一个趋势中的趋势的项目!
一个直销和传销终结者的项目!
一个帮助普通创业者成功的项目!
   我们在互联网上正在拓展一个生意项目,现在正在寻求合作伙伴。我们认为成功的关键是你是什么人?还有你和谁在一起。我们在乎的是--您是否是有激情、有梦想的人。有意者请跟我们联系,我们和您谈谈,给您讲解一些生意概念,或许我们可以合作。一个集即时网游、交友,娱乐游戏,网络品牌代理商城,互联网平台项目招商进行中……详情QQ空间资料
网商咨询 摩客天宇QQ 909065437 

我来回复

您尚未登录,请登录后再回复。点此登录或注册