成绩 | 15 | 开启时间 | 2017年11月24日 星期五 00:00 |
折扣 | 0.8 | 折扣时间 | 2017年12月18日 星期一 00:00 |
允许迟交 | 否 | 关闭时间 | 2017年12月31日 星期日 00:00 |
题目:邻接表和邻接矩阵都是图的表示方法,它们相互之间也可以通过一定的方式进行转换。本题将给出一个有向图的邻接表,请将此邻接表转换成对应的邻接矩阵。
说明:每个点由除空格外的一个可显示字符表示,点的顺序由ASCII码表的顺序决定。
输入:
输入有若干行
每行的第一个字符表示起点,随后由空格隔开的若干字符表示终点
输出:
该邻接表对应的邻接矩阵(字符在邻接表中未出现表示不含该点)
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 2 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 3 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
#include<cstdio>
#include<string.h>
#include<map>
#include<algorithm>
#include<vector>
char biao[127][127];
int juzhen[127][127];
using namespace std;
map<char,int> Point;
map<char, int>Allpoints;
typedef pair<char, int>PAIR;
int cmp(const PAIR &x,const PAIR &y)
{
return x.first > y.first;
}
int main()
{
//freopen("1.txt", "r", stdin);
int row = 0;
int len = 0;
char Row[20];
int index;
while (gets(biao[row])!=NULL)
{
int i; //int k=0;
for (i= 0; biao[row][i]; i++)
{
if (biao[row][i] != ' ')
{
char c = biao[row][i];
if (Allpoints.count(c)==0)
Allpoints.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=Allpoints.begin(); int value = 0;
while (it != Allpoints.end())
{
it->second = value++;
it++;
}
for (int i = 0; i < row; i++)
{
int a = Allpoints.find(biao[i][0])->second;
for (int j = 1; biao[i][j]; j++)
{
if (biao[i][j] != ' ')
{
int b = Allpoints.find(biao[i][j])->second;
juzhen[a][b]++;
}
}
}
len = Allpoints.size();
for (int i = 0; i < len; i++)
{
for (int j = 0; j < len; j++)
{
if (j == len - 1)
printf("%d\n", juzhen[i][j]);
else
printf("%d ", juzhen[i][j]);
}
}
return 0;
}