首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

深度优先遍历哪出错了,求教,该如何处理

2012-05-10 
深度优先遍历哪出错了,求教代码写的有点乱啊,不要嫌弃啊,求助C/C++ code#include iostreamusing namespa

深度优先遍历哪出错了,求教
代码写的有点乱啊,不要嫌弃啊,求助

C/C++ code
#include <iostream>using namespace std;#define MAX_VERTEX_NUM 20 typedef struct{    int adj;}AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];struct MGraph{    char vertex[MAX_VERTEX_NUM]; // 顶点向量    AdjMatrix arcs; // 邻接矩阵     int vexnum, arcnum; // 图的当前顶点数和边数};struct Arr{    int elem[MAX_VERTEX_NUM];};int LocateVertex(MGraph G,char v);void CreateUDG(MGraph &G);void DepthFirstSearch(MGraph G);void BreadthFirstSearch(MGraph G);void Display(MGraph G);//用于返回输弧端点所表示的数值int LocateVertex(MGraph G,char v){    int j=0,i;    for(i=0;i<G.vexnum;++i)        if(G.vertex[i]==v)        {            j=i;            break;        }        return j;}void CreateUDG(MGraph &G){ // 采用邻接矩阵表示法,构造无向图    int i,j,k;//i,j,k为计数器    char v1,v2; //用于放置输入的弧的两个顶点    cout<<"请输入无向图G的顶点数,边数: "<<endl;    cin>>G.vexnum>>G.arcnum;    cout<<"请输入"<<G.vexnum<<"个顶点的值,空格隔开:"<<endl;    for(i=0;i<G.vexnum;++i) // 构造顶点向量    {        cin>>G.vertex[i];    }    cout<<"请输入"<<G.arcnum<<"条边的顶点  顶点: "<<endl;    for(i=0;i<G.vexnum;++i) // 初始化邻接矩阵        for(j=0;j<G.vexnum;++j)        {             G.arcs[i][j].adj=0;         }        for(k=0;k<G.arcnum;++k)        {            cin>>v1>>v2;            i=LocateVertex(G,v1);            j=LocateVertex(G,v2);            G.arcs[i][j].adj=G.arcs[j][i].adj=1; // 置<v1,v2>的对称弧<v2,v1>         }}//无向图深度优先遍历void DepthFirstSearch(MGraph G) {    int i,j, k=0,visited[MAX_VERTEX_NUM],t=1; //t标记输出顶点个数,visited[20]为标志符用于表示是否已经访问过    Arr p;    for(i=0;i<G.vexnum;++i)        visited[i]=0;    visited[0]=1; //第一个字符开始遍历    cout<<"深度优先遍历:"<<endl;    cout<<G.vertex[0];    i=0;    while(i<G.vexnum)    {        for(j=0;j<G.vexnum;++j)        {            if(G.arcs[i][j].adj!=0 && visited[j]==0)            {                 cout<<G.vertex[j];                visited[j]=1;                p.elem[k]=i;                i=j;                k++;                t++;            }        }        //if(j==G.vexnum)//当在某一行无法找到合适值时,返回上一行重新开始循环        //{                        k--;            i=p.elem[k];        //}        if(t==G.vexnum)            break; //当全部的定点都打印出来了就退出循环            }    cout<<endl;}void BreadthFirstSearch(MGraph G) {//无向图广度优先遍历    int visited[MAX_VERTEX_NUM],t=1; //t标记输出顶点个数,visited[20]为标志符用于表示是否已经访问过    for(int i=0;i<G.vexnum;++i) //初始化标志符        visited[i]=0;    visited[0]=1; //规定以第一个字符开始遍历    cout<<"广度优先遍历:"<<endl;    cout<<G.vertex[0];    for(int i=0;i<G.vexnum;++i)    {        for(int j=0;j<G.vexnum;++j)        {            if(G.arcs[i][j].adj!=0 && visited[j]==0)            {                cout<<G.vertex[j];                visited[j]=1;                t++;            }        }        //i++;        if(t==G.vexnum)            break;    }    cout<<endl;}//输出图的邻接矩阵void Display(MGraph G){    int i,j;    cout<<"该图的邻接矩阵为:"<<endl;    for(i=0;i<G.vexnum;++i)    {        for(j=0;j<G.vexnum;++j)            cout<<G.arcs[i][j].adj<<" ";        cout<<endl;    }}int main(){    MGraph G;    CreateUDG(G);    Display(G);    DepthFirstSearch(G);    BreadthFirstSearch(G);        system("pause");    return 0;}


[解决办法]
自己才是最可靠的~

热点排行