回 帖 发 新 帖 刷新版面

主题:初学者求教,C++数据结构的

还要添加深度和广度遍历进去,但是试了几次水平有限,不知道怎么弄,希望各位大大帮忙一下




#include<iostream>
using namespace std;
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define Max 100//最大顶点数设为100
typedef char VertexType;/*假设顶点的数据类型为字符*/
typedef int EdgeType;
/*存储结构*/
typedef struct{    
    int n,e;/*当前顶点数和边数*/
    VertexType v[Max];/*顶点数组*/
    EdgeType a[Max][Max],visited[Max];/*邻接矩阵*/
}MGraph;
/*基本操作*/
MGraph* print(){/*输入*/
    MGraph G;
    char s,t;
    int i,j,k;
    cout<<"请输入顶点数和和边数:"<<endl;
    cin>>G.n>>G.e;
    if(G.n==0)
        cout<<"该图是空!";
    cout<<"请输入顶点信息:"<<endl;
    for(i=0;i<G.n;i++)
        cin>>G.v;
    for(i=0;i<G.n;i++)
        for(j=0;j<G.n;j++)
            G.a[j]=0;//初始化邻接矩阵
    cout<<"请输入每个边对应的两个顶点(输入格式:s,t):"<<endl;
    for(k=0;k<G.e;k++){
        cin>>s>>t;
        for(i=0;i<G.n;i++)
            if(G.v==s)
                break;
        for(j=0;j<G.n;j++)
            if(G.v[j]==t)
                break;
        G.a[j]=1;
        G.a[j]=1;    //无向图邻接矩阵存储建立
    }
    return &G;
}
MGraph* Output(MGraph G){/*输出*/
    cout<<"顶点:";
    for(int i=0;i<G.n;i++)
        cout<<G.v<<',';
    cout<<endl;
    if(G.n)
        cout<<"\b";
    cout<<"边:";
    for(i=0;i<G.n;i++)
        for(int j=0;j<G.n;j++)
            if(G.a[j]==1)
                cout<<"("<<G.v<<","<<G.v[j]<<")\t";
    if(G.e)
        cout<<"\b";
    cout<<endl;
    cout<<"邻接矩阵:"<<endl;
    cout<<"{"<<endl;
    for(i=0;i<G.n;i++){
        for(int j=0;j<G.n;j++)
            cout<<G.a[j]<<' ';
        cout<<endl;
    }
    cout<<"}"<<endl;
    return &G;
}
MGraph* InsertVex(MGraph &G,VertexType v){/*增添顶点*/
    cout<<"增加的顶点信息"<<endl;
    cin>>v;
    if(G.n==Max){
        cout<<"\n顶点数组已满!";
        exit(1);
    }
    for(int i=0;i<G.n;i++)
        if(G.v==v)
            cout<<"顶点已经存在"<<endl;/*顶点已存在*/
    G.v[G.n++]=v;
    for(int j=0;j<G.n;j++){//新增的顶点进行对其连接的边初始化
        G.a[j][G.n-1]=0;
        G.a[G.n-1][j]=0;
    }
    return &G;
}
MGraph* InsertArc(MGraph &G,VertexType v,VertexType w){/*增添边*/
    cout<<"增添边的两个顶点的信息:"<<endl;
    cin>>v>>w;
    for(int i=0;i<G.n;i++)if(G.v==v)break;
    for(int j=0;j<G.n;j++)if(G.v[j]==w)break;
    if(i>=G.n||j>=G.n||i==j){
        cout<<"\n无效边!";
        exit(1);
    }
    G.a[j]=1;
    G.a[j]=1;
    G.e++;
    return &G;
}
MGraph* DeleteVex(MGraph &G,VertexType v){/*删除顶点*/
    cout<<"请输入删除顶点的信息:"<<endl;
    cin>>v;
    for(int i=0;i<G.n;i++)if(G.v==v)break;
    if(i>=G.n){
        cout<<"\n无此顶点!";
        exit(1);
    }
    for(int j=0;j<G.n;j++)G.a[j]=G.a[j]=0;
    for(j=i+1;j<G.n;j++){
        G.v[j-1]=G.v[j];
        for(int k=0;k<G.n;k++)
            G.a[j-1][k]=G.a[j][k],G.a[k][j-1]=G.a[k][j];
    }
    G.n--;
    return &G;
}
MGraph* DeleteArc(MGraph &G,VertexType v,VertexType w){/*删除边*/
    cout<<"请输入要删除边的两个顶点的信息:"<<endl;
    cin>>v>>w;
    for(int i=0;i<G.n;i++)if(G.v==v)break;
    for(int j=0;j<G.n;j++)if(G.v[j]==w)break;
    if(i>=G.n||j>=G.n||i==j||!G.a[j]){
        cout<<"\n无效边!";
        exit(1);
    }
    G.a[j]=0;
    G.a[j]=0;
    G.e--;
    return &G;    
}
MGraph* OD(MGraph &G){//出度的检索
    int i,j,k;
    for(i=0;i<G.n;i++){
        k=0;
        for(j=0;j<G.n;j++){    
            if(G.a[j]==1)
                k=+1;
        }
        cout<<G.v<<"点的出度是:"<<k<<endl;
    }
    return &G;
}
MGraph* ID(MGraph &G){//入度的检索
    int i,j,k;
    for(i=0;i<G.n;i++){
        k=0;
        for(j=0;j<G.n;j++){    
            if(G.a[j]==1)
                k=+1;
        }
        cout<<G.v<<"点的入度是"<<k<<endl;
    }
    return &G;
}

/*主函数*/
void main(){
    int v=0,w=0,i;
    MGraph G;
    G=*print();
    Output(G);                
    InsertVex(G,v);
    Output(G);
    InsertArc(G,v,w);
    Output(G);
    ID(G);            
    OD(G); 
    DeleteVex(G,v);
    Output(G);
    DeleteArc(G,v,w);
    Output(G);
}[em2]

回复列表 (共4个回复)

沙发

网上有现成的图搜索代码,搜搜看,你也可以的

板凳

深圳华信群英科技有限公司,目前主要从事软件外包开发、高级软件人才定向输送等业务,面对日益严峻的大学生就业难和IT企业招聘难,自2006以来,与知名通信软件公司正式签订定向输送人才的合作协议,针对想进入软件行业的人员提供企业实训,实训课程采用“2+3”分段教学模式,分为2个月理论强化和3个月项目实训两个阶段,共计900学时。
企业订单委培,内训前签订就业安置协议,100%保证就业。实训结束之后,在华信群英科技及其战略合作伙伴从事通信软件研发工作。欢迎有意向者加QQ:649846168咨询。

3 楼

学习中

4 楼

数据结构中深度广度遍历算法都有的

我来回复

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