茂一彭于晏 2022-05-21 21:26 采纳率: 75%
浏览 11
已结题

无向图邻接表无法成功得到运行结果,显示的是问号

#include
#include
#define MVNum 100
#define OK 1
#define ERROR -1
using namespace std;
typedef char VerTexType;
typedef int Status;

typedef struct ArcNode{
int adjvex;
struct ArcNode *nextarc;
}ArcNode;

typedef struct VNode{
VerTexType data;
ArcNode *firstarc;
}VNode,AdjList[MVNum];

typedef struct{
AdjList vertices;
int vexnum,arcnum;
}ALGraph;

Status LocateVex(ALGraph G,VerTexType v){
for(int i=0;i<G.vexnum;++i){
if(G.vertices[i].data==v)
return i;
return ERROR;
}
}
Status CreateUDG(ALGraph &G){
VerTexType v1,v2;
int i,j,k;
cout<<"请输入顶点和边数:";
cin>>G.vexnum>>G.arcnum; //顶点和边数

cout<<"请输入顶点:";
for(i=0;i<G.vexnum;++i){
    cin>>G.vertices[i].data;
    G.vertices[i].firstarc=NULL;    //初始化表头指针 
} 

cout<<"请输入边:"<<endl;
for(k=0;k<G.arcnum;++k){
    ArcNode *p1,*p2;
    cin>>v1>>v2;
    i=LocateVex(G,v1);
    j=LocateVex(G,v2);
    
    p1=new ArcNode;
    p1->adjvex=j;
    p1->nextarc=G.vertices[i].firstarc;    //头插法 
    G.vertices[i].firstarc=p1;
    
    p2=new ArcNode;
    p2->adjvex=i;
    p2->nextarc=G.vertices[j].firstarc;    //头插法 
    G.vertices[j].firstarc=p2;
}
return OK;

}

void Print(ALGraph G)//打印邻接表
{
cout<<"打印邻接表如下:";
cout<<endl;
for(int i=0; i<G.vexnum; i++)//遍历每个顶点的邻接表
{
cout<<G.vertices[i].data;
ArcNode *p=G.vertices[i].firstarc;

    while(p)
    {
        cout<<"->"<<G.vertices[p->adjvex].data;
        p=p->nextarc;
    }
    cout<<endl;
    
}

}

int FirstAdjVex(ALGraph G,int v){

ArcNode *p=G.vertices[v].firstarc;
if(p)    return p->adjvex;

else 
    return ERROR;

}

int NextAdjVex(ALGraph G,int v,int w){
int i;
ArcNode *p=G.vertices[i].firstarc;
while(p){
if(p->adjvex==w) break;

    p=p->nextarc;
}
if(p->adjvex!=w||!p->nextarc)
    return ERROR;
return p->nextarc->adjvex; 

}

bool visited[10];

void DFS(ALGraph G,int v){
int w;
visited[v]=true;
cout<<G.vertices[v].data<<" ";
for(w=FirstAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w))
if(!visited[w])
DFS(G,w);
}

void DFSTraverse(ALGraph G) //深搜
{ int i;
for(i=0;i<G.vexnum;++i)
visited[i]=false; //全部置为未访问

for(i=0;i<G.vexnum;i++)
    if(!visited[i])
        DFS(G, i);

}

void BFSTraverse(ALGraph G) //广搜
{
queue q;
int i;
for(i=0; i<G.vexnum; i++)
visited[i]=false;

for(i=0; i<G.vexnum; i++)
{
    if(!visited[i])
    {
        q.push(i);
        visited[i]=true;
        while(!q.empty())
        {
            int v=q.front();
            q.pop();
            cout<<G.vertices[v].data<<" ";
            for(int w=FirstAdjVex(G, v); w>=0; w=NextAdjVex(G, v, w))
            {
                if (!visited[w])
                {
                    q.push(w);
                    visited[w]=true;
                }
            }

        }
    }

}

}

int main()
{
ALGraph G;
CreateUDG(G);
Print(G);

cout<<"深度遍历:";
DFSTraverse(G);
cout<<endl;

cout<<"广度遍历:";
BFSTraverse(G);
cout<<endl;
return 0;

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 5月29日
    • 创建了问题 5月21日

    悬赏问题

    • ¥15 用三极管设计—个共射极放大电路
    • ¥15 请完成下列相关问题!
    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
    • ¥15 求daily translation(DT)偏差订正方法的代码
    • ¥15 js调用html页面需要隐藏某个按钮
    • ¥15 ads仿真结果在圆图上是怎么读数的
    • ¥20 Cotex M3的调试和程序执行方式是什么样的?
    • ¥20 java项目连接sqlserver时报ssl相关错误
    • ¥15 一道python难题3
    • ¥15 牛顿斯科特系数表表示