邻接表与邻接矩阵

邻接表与邻接矩阵

题目

题目:邻接表和邻接矩阵都是图的表示方法,它们相互之间也可以通过一定的方式进行转换。本题将给出一个有向图的邻接表,请将此邻接表转换成对应的邻接矩阵。

说明:每个点由除空格外的一个可显示字符表示,点的顺序由ASCII码表的顺序决定。

输入:
输入有若干行
每行的第一个字符表示起点,随后由空格隔开的若干字符表示终点

输出:
该邻接表对应的邻接矩阵(字符在邻接表中未出现表示不含该点)

 测试输入关于“测试输入”的帮助期待的输出关于“期待的输出”的帮助时间限制关于“时间限制”的帮助内存限制关于“内存限制”的帮助额外进程关于“{$a} 个额外进程”的帮助
测试用例 1以文本方式显示
  1. a b c↵
  2. b a c↵
  3. c a b↵
以文本方式显示
  1. 0 1 1↵
  2. 1 0 1↵
  3. 1 1 0↵
1秒64M0

代码

#include<cstdio> 
#include<string.h> 
#include<map> 
#include<algorithm> 
#include<vector> 
char linjiebiao[150][150];
int zhen[150][150];
using namespace std;

map <char, int> Point;
map <char, int> points;

typedef pair <char, int> PAIR;

int cmp(const PAIR& x, const PAIR& y)
{
    return x.first > y.first;
}

int main()
{
    int len = 0;
    int row = 0;
    char Row[20];
    int index;
    int i,j,k;
    while (gets(linjiebiao[row]) != NULL)
    {
        for (i = 0; linjiebiao[row][i]; i++)
        {
            if (linjiebiao[row][i] != ' ')
            {
                char c = linjiebiao[row][i];
                if (points.count(c) == 0)
                {
                    points.insert(pair<char, int>(c, 0));
                }
                if (Point.count(c) == 0)
                {
                    Point.insert(pair<char, int>(c, 0));
                }
            }

        }
        if (len < Point.size())
        {
          len = Point.size();
        }
        Point.clear();
        row++;
    }
    map<char, int>::iterator it = points.begin();

    int value = 0;

    while (it != points.end())
    {
        it->second = value++;
        it++;
    }
    for (i = 0; i < row; i++)
    {
        int a = points.find(linjiebiao[i][0])->second;
        for (int j = 1; linjiebiao[i][j]; j++)
        {
            if (linjiebiao[i][j] != ' ')
            {
                int b = points.find(linjiebiao[i][j])->second;
                zhen[a][b]++;
            }
        }
    }
    len = points.size();

    for (i = 0; i < len; i++)
    {
      for (j = 0; j < len; j++)
      {
        if (j == len - 1)
          {
            printf("%d\n", zhen[i][j]);
          }
        else
        {
          printf("%d ", zhen[i][j]);
        }
      }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值