图论 邻接矩阵建图+dfs遍历

来源:互联网 发布:缺少对象 javascript 编辑:程序博客网 时间:2024/04/28 07:35

第一次i建图,用的邻接矩阵。

#include<stdio.h>#include<string.h>#include<string>#include<iostream>#include<algorithm>#define inf 65535using namespace std;typedef struct mygraph{    int ver[1000];    int arc[100][100];    int num_ver,num_edge;} Graph;int vis[100];void create(Graph *G)//邻接矩阵建图{    int i,j,k;    scanf("%d%d",&G->num_ver,&G->num_edge);//输入节点数和边数    for(i=0; i<G->num_ver; i++)//输入边集        scanf("%d",&G->ver[i]);    for(i=0; i<G->num_ver; i++)//权值初始化    {        for(j=0; j<G->num_edge; j++)            G->arc[i][j]=inf;    }    int a,b,c;    for(i=0; i<G->num_edge; i++)//输入边集    {        scanf("%d%d%d",&a,&b,&c);        G->arc[a][b]=c;        G->arc[b][a]=c;    }}void dfs(Graph *G,int i)//深搜{    int j;    vis[i]=1;    printf("%d ",G->ver[i]);    for(j=0; j<G->num_ver; j++)        if(G->arc[i][j]>0&&!vis[j])dfs(G,j);}int main(){    int i,j,k;    Graph myG;    create(&myG);    memset(vis,0,sizeof(vis));        //深搜遍历    for(i=0; i<myG.num_ver; i++)        if(!vis[i])dfs(&myG,i);    printf("\n");        for(i=0; i<myG.num_ver; i++)//打印邻接矩阵    {        for(j=0; j<myG.num_ver; j++)            printf("%5d ",myG.arc[i][j]);        printf("\n");    }                return 0;}/*5 60 1 2 3 40 1 90 2 20 4 61 2 32 3 53 4 1*/
测试数据中5  6代表节点数为5,边数为,6,下面是结点名0 1 2 3 4  下面几行中分别为为 弧尾(边的起点),弧首(边的终点),和边的权值
原创粉丝点击