zoukankan      html  css  js  c++  java
  • 图的基本存储的基本方式一

    图的基本存储的基本方式一

    Description

    解决图论问题,首先就要思考用什么样的方式存储图。但是小鑫却怎么也弄不明白如何存图才能有利于解决问题。你能帮他解决这个问题么?

    Input

     多组输入,到文件结尾。

    每一组第一行有两个数n、m表示n个点,m条有向边。接下来有m行,每行两个数u、v代表u到v有一条有向边。第m+2行有一个数q代表询问次数,接下来q行每行有一个询问,输入两个数为a,b。

    注意:点的编号为0~n-1,2<=n<=5000 ,n*(n-1)/2<=m<=n*(n-1),0<=q<=1000000,a!=b,输入保证没有自环和重边

    Output

     对于每一条询问,输出一行。若a到b可以直接连通输出Yes,否则输出No。

    Sample

    Input 

    2 1
    0 1
    2
    0 1
    1 0

    Output 

    Yes
    No
     1 #include <stdio.h>
     2 #include<stdbool.h>
     3 #include <stdlib.h>
     4 #include<string.h>
     5 bool a[5001][5001]; // 用int会超时
     6 
     7 int main()
     8 {
     9     int n,m,i;
    10     while ( ~scanf("%d %d",&n,&m) ) {
    11         int x,y;
    12         memset(a, 0, sizeof(a)); // 将二维数组a初始化为0
    13         for ( i=0; i<m; i++ ) {
    14             scanf("%d %d",&x,&y);
    15             a[x][y] = 1;
    16         }
    17 
    18         int list;
    19         scanf("%d",&list);
    20         for ( i=0; i<list; i++ ) {
    21             scanf("%d %d",&x,&y);
    22             if ( a[x][y]==1 ) {
    23                 printf("Yes
    ");
    24             }
    25             else {
    26                 printf("No
    ");
    27             }
    28         }
    29     }
    30 
    31     return 0;
    32 }

     邻接矩阵

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 _Bool a[111][111];
     5 _Bool visit[111];
     6 int b[111];
     7 int in = 1, out = 0;
     8 void bfs(int t, int k)
     9 {
    10     visit[t] = 1;
    11     int i;
    12     out++;
    13     for(i = 0; i < k; i++)
    14     {
    15         if(!visit[i] && a[t][i])
    16         {
    17             b[in++] = i;
    18             visit[i] = 1;
    19         }
    20     }
    21     if(out <= in)
    22         bfs(b[out], k);
    23 
    24 }
    25 int main()
    26 {
    27     int n, k, m, t, u, v, i;
    28     scanf("%d", &n);
    29     while(n--)
    30     {
    31         memset(a, 0, sizeof(a));
    32         memset(visit, 0, sizeof(visit));
    33         memset(b, 0, sizeof(b));
    34         scanf("%d%d%d", &k, &m, &t);
    35         for(i = 0; i < m; i++)
    36         {
    37             scanf("%d%d", &u, &v);
    38             a[u][v] = 1;
    39             a[v][u] = 1;
    40         }
    41         bfs(t, k);
    42         printf("%d ", t);
    43         for(i = 1; i < k; i++)
    44             printf("%d%c", b[i], i == in-1? '
    ' : ' ');
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    ubuntu新的配置
    今天下午鼓捣android-studio的一些经验
    Sublime Text 3
    学Web前端开发,选择培训学校是关键--青岛思途
    让HTML5游戏来的更猛烈些吧!--青岛思途
    Java架构师和开发者实用工具推荐
    Java培训班4个月有用吗?
    Java培训机构如何选择才能避免被骗?
    Java跟JavaScript两者间的关系和区别
    浅谈java中的四个核心概念--思途青岛
  • 原文地址:https://www.cnblogs.com/xiaolitongxueyaoshangjin/p/12379910.html
Copyright © 2011-2022 走看看