栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

关于图的操作

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于图的操作

实验目的:
(1)掌握图的邻接矩阵和邻接表存储方式;
(2)掌握图的遍历算法;
(3)掌握图的实际应用——最短路径算法。

实验要求:
(1)采用邻接矩阵/邻接表建立图;
(2)采用深度优先/广度优先搜索方式遍历图;
(3)编程实现Dijkstra最短路径算法。

实验代码:

#include
#include
using namespace std;
#define MaxInt 100
#define MVNum 100
typedef struct
{
    char vexs[MVNum];
    int arcs[MVNum][MVNum];
    int vexnum,arcnum;
}AMGraph;

int LocateVex(AMGraph &G,char v)
{
    for(int i=0;i
        if(G.vexs[i]==v)
        {
            return i;
        }
    }
}
int CreateUDN(AMGraph &G)//用邻接矩阵创建无向网
{
    cout<<"输入顶点数及边数:"<>G.vexnum>>G.arcnum;
    cout<<"输入顶点:"<
        cin>>G.vexs[i];
    }
    for(int i=0;i
        for(int j=0;j
            G.arcs[i][j]=MaxInt;
        }
    }
    for(int k=0;k
        cout<<"输入一条边依附的顶点及权值:"<>v1>>v2>>w;
        int i=LocateVex(G,v1);
        int j=LocateVex(G,v2);
        G.arcs[i][j]=w;
        G.arcs[j][i]=G.arcs[i][j];
    }
    cout<<"邻接矩阵创建无向网成功"<
    int adjvex;
    struct ArcNode *nextarc;
    //OtherInfo info;
}ArcNode;
typedef struct VNode
{
    char data;
    ArcNode *firstarc;
}VNode,AdjList[MVNum];
typedef struct
{
    AdjList vertices;
    int vexnum,arcnum;
}ALGraph;


int LocateVex(ALGraph &G,char v)
{
    for(int i=0;i
        if(v==G.vertices[i].data) return i;
    }
}
int CreateUDG(ALGraph &G)
{
    cout<<"输入顶点数及边数:"<>G.vexnum>>G.arcnum;
    cout<<"输入顶点:"<
        cin>>G.vertices[i].data;
        G.vertices[i].firstarc=NULL;
    }
    cout<<"输入每一条边依附的两个顶点:"<
        char v1,v2;
        cin>>v1>>v2;
        int i=LocateVex(G,v1);
        int j=LocateVex(G,v2);
        ArcNode *p1=new ArcNode;
        p1->adjvex=j;
        p1->nextarc=G.vertices[i].firstarc;
        G.vertices[i].firstarc=p1;
        ArcNode *p2=new ArcNode;
        p2->adjvex=i;
        p2->nextarc=G.vertices[j].firstarc;
        G.vertices[j].firstarc=p2;
    }
    cout<<"邻接表创建无向图成功"<
    cout<
        if((G.arcs[v][w]!=0)&&(!visited[w])) DFS_AM(G,w,visited);
    }
}

void ShortestPath_DIJ(AMGraph &G,int v0)
{
    int n=G.vexnum;
    bool S[n];
    int D[n];
    int Path[n];
    for(int v=0;v
        S[v]=false;
        D[v]=G.arcs[v0][v];
        if(D[v]
        cout<
        cout<
        cout<
        int Min=MaxInt;
        int v;
        for(int w=0;w
            if(!S[w]&&D[w]
                v=w;
                Min=D[w];
            }
        }
        S[v]=true;
        for(int w=0;w
            if(!S[w]&&(D[v]+G.arcs[v][w]
                D[w]=D[v]+G.arcs[v][w];
                Path[w]=v;
            }
        }
    }
    for(int i=0;i
        cout<<"v0到v"<
	for(int i=0;i
		if(G.arcs[u][i]!=0)
		{
			return i;
		}
	}
	
}
int NextAdjVex(AMGraph &G,int u,int w)
{
		for(int i=w+1;i
		if(G.arcs[u][i]!=0)
		{
			return i;
		}
	}
}
int BFS(AMGraph &G,int v)
{
    cout<false};
    visited[v]=true;
    queue Q;
    Q.push(v);
    while(!Q.empty())
    {
    	int u=Q.front();
    	Q.pop();
        for(int w=FirstAdjVex(G,u);w>=0;w=NextAdjVex(G,u,w))
        {
            if(!visited[w])
                {
                    cout<

int w;

printf("%c ", G.vertices[v].data);

visited[v] = 1;

ArcNode *p = new ArcNode;

p = G.vertices[v].firstarc;

while (p)

{

w = p->adjvex;

if (!visited[w]) DFS_AL(G, w,visited);

p = p->nextarc;

}

}

int main()
{
    ALGraph G;
    CreateUDG(G);
    cout<<"采用深度优先搜索方式遍历图:" <0};
	DFS_AL(G,0,visited);
   
    
    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976945.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号