| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 589 人关注过本帖
标题:求助,关于图的深度广度遍历问题
取消只看楼主 加入收藏
shzwkd
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-5-21
收藏
 问题点数:0 回复次数:0 
求助,关于图的深度广度遍历问题
这是下面实现的一些功能,目前还有两个遍历不知道怎么加进去,请高手帮忙看下



#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);
}
搜索更多相关主题的帖子: 遍历 深度 
2010-05-21 09:18
快速回复:求助,关于图的深度广度遍历问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041176 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved