图的实现


#include<iostream>  
#include<cstdlib>  
  
#define MaxNum 60  
#define MaxValue 190  
  
using namespace std;  
  
typedef struct Graph                  
{  
    char Vertex[MaxNum];              
    int GType;                       
    int VNum;                   
    int EdgeNum;                     
    int EdgeWight[MaxNum][MaxNum];    
    int isTrav[MaxNum];             
};  
  
void CreateGraph(Graph *G)            
{  
   int i, j, k;  
    int weight;  
    char Estart, Eend;  
  
    cout << "输入各顶点信息 : " << endl;  
    for (i = 0; i < G->VNum; i++)  
    {  
        cout << "第 " << i + 1 << " 个定点 " << endl;  
        cin >> G->Vertex[i];  
    }  
 
    cout << "输入各边顶点及权值 " << endl;  
    for (k = 0; k < G->EdgeNum; k++)  
    {  
        cout << "第 " << k + 1 << " 条边 " << endl;  
        cin >> Estart >> Eend >> weight;  
        for (i = 0; G->Vertex[i] != Estart; i++);  
        for (j = 0; G->Vertex[j] != Eend; j++);  
        G->EdgeWight[i][j] = weight;  
        if (G->GType == 0)  
        {  
            G->EdgeWight[j][i] = weight;  
        }  
    }  
}  
  
void ClearGraph(Graph *G)                        
{  
    for (int i = 0; i < G->VNum; i++)  
        for (int j = 0; j < G->VNum; j++)  
            G->EdgeWight[i][j] = MaxValue;  
}  
  
void OutGraph(Graph *G)                           
{  
      
    cout << "   ";  
    for (int i = 0; i < G->VNum; i++)  
       cout << G->Vertex[i] << "  ";   
cout << endl;  
    for (int i = 0; i < G->VNum; i++)  
    {  
        cout << G->Vertex[i] << " ";  
       for (int j = 0; j < G->VNum; j++)  
        {  
            if (G->EdgeWight[i][j] == MaxValue)  
                cout << " N ";   
else  
                cout << " " << G->EdgeWight[i][j] << " ";  
        }  
        cout << endl;  
    }  
}  
  
void DeepGraphOne(Graph *G, int n)                 
{
    int i;  
    G->isTrav[n] = 1;  
    cout << G->Vertex[n];  
    for (int i = 0; i < G->VNum; i++)  
    {  
        if (G->EdgeWight[n][i] != MaxValue&&!G->isTrav[i])   
        {  
            DeepGraphOne(G, i);                    
        }  
    }  
}  
  
void DeepGraph(Graph *G)                          
{  
    for (int i = 0; i < G->VNum; i++)  
        G->isTrav[i] = 0;  
    cout << "深度优先遍历" << endl;  
    for (int i = 0; i < G->VNum; i++)  
    {  
        if (!G->isTrav[i])  
        {  
            DeepGraphOne(G, i);  
        }  
    }  
    cout << "\n" << endl;  
}  
  
int main()  
{  
    Graph G;  
    cout << "请输入生成图的类型,0无像,1有像" << endl;  
    cin >> G.GType;  
    cout << "请输入顶点数量" << endl;  
    cin >> G.VNum;  
    cout << "请输入边的数量" << endl;  
    cin >> G.EdgeNum;  
    ClearGraph(&G);  
    CreateGraph(&G);  
    cout << "图的邻接矩阵如下" << endl;  
    OutGraph(&G);  
    cout << "深度优先搜索" << endl;  
    DeepGraph(&G);  
  
    system("pause");  
    return 0;  
}  

猜你喜欢

转载自blog.csdn.net/LWY_942/article/details/80624517