zoukankan      html  css  js  c++  java
  • 图的3种表示方法

    //邻接矩阵
     #include<stdio.h>
     #include<string.h>
     int main()
     {
         int map[101][101];
         memset(map,0,sizeof(map));
         int u, v, w;
         int m, n ,i;
         scanf("%d %d",&m,&n);//m个点n条边
         for(i = 1;i <= n; i++)
         {
             scanf("%d %d %d",&u,&v,&w);
             map[u][v] = w;
             map[v][u] = w;
         }
         for(i = 1;i <=m; i++)
         {
             printf("与%d相关联的点有:\n",i);
             for(int j = 1;j <= n; j++)
             {
                 if(map[i][j]!=0)
                 printf("%d ",j);
             }
             printf("\n");
         }
         return 0;
     }
    
    //邻接表
     #include<stdio.h>
     #include<string.h>
     #include<stdlib.h>
     
     #define M 101
     int head[M],t=0;
     
     struct node
     {
         int u,v,w;
         int next;
     }g[M];
     
     void init()
     {
         t=0;
         memset(head,-1,sizeof(head));
     }
     void add(int u,int v,int w)
     {
         g[t].u=u;
         g[t].v=v;
         g[t].w=w;
         g[t].next=head[u];
         head[u]=t;
         t++;
     }
     int main()
     {
         int m,n;
         int i, j;
         scanf("%d %d",&m,&n);
         int u,v,w;
         init();
         for(i = 1;i <= n; i++)
         {
             scanf("%d %d %d",&u,&v,&w);
             add(u,v,w);
             add(v,u,w);
         }
         for(i = 1;i <= m; i++)
         {
             printf("与%d相关联的点有:\n",i);
             for(j = head[i];j != -1;j = g[j].next)
             {
                 printf("%d ",g[j].v);
             }
             printf("\n");
         }
         return 0;
     }
    
     //邻接表--链表
     #include<stdio.h>
     #include<string.h>
     #include<malloc.h>
     #define N 101
     
     struct node
     {
         int u,v,w;
         struct node *next;
     }*head[N];
     
     void init()
     {
         memset(head,NULL,sizeof(head));
     }
     void add(int u,int v,int w)
     {
         struct node *p = (struct node*)malloc(sizeof(struct node));
         p->v = v;
         p->w = w;
         p->next = head[u];
         head[u] = p;
     }
     
     int main()
     {
         int m,n;
         scanf("%d %d",&m,&n);
         init();
         int i;
         int u,w,v;
         for(i = 1;i <= n; i++)
         {
             scanf("%d %d %d",&u,&v,&w);
             add(u,v,w);
             add(v,u,w);
         }
         for(i = 1;i <= m; i++)
         {
             printf("与%d相关联的点有:\n",i);
             for(struct node *p = head[i];p != NULL;p=p->next)
             {
                 printf("%d ",p->v);
             }
             printf("\n");
         }
         return 0;
     }
    View Code
  • 相关阅读:
    [置顶] .net技术类面试、笔试题汇总1
    [置顶] Linux协议栈代码阅读笔记(一)
    JS 获取浏览器窗口大小
    huapin
    display:table-cell几种应用
    flex布局大讲解
    chrome的source工具
    linux配置yum源
    oracle Can't connect to X11 window server using ':0.0' /Checking monitor: must be configured to display at least 256 colors解决方法
    oracle Recyclebin
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/2934527.html
Copyright © 2011-2022 走看看