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
  • 相关阅读:
    散列函数的构造方法
    散列表(哈希表)查找
    散列表,哈希表,散列表查找法
    多路查找树之2-3-4树和B树
    多路查找树之2-3树的删除原理
    多路查找树之2-3树的插入原理
    多路查找树之2-3树
    字典:当索引不好用时2
    字典:当索引不好用时
    平衡二叉树的实现原理(代码实现)- 数据结构和算法78
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/2934527.html
Copyright © 2011-2022 走看看