2:社交网络 wrong answer

天杪 2018-03-01 11:06:49
描述
随着社交平台的兴起,人们之间的沟通变得越来越密切。通过Facebook的分享功能,只要你是对方的好友,你就可以转发对方的状态,并且你的名字将出现在“转发链”上。经过若干次转发以后,很可能A分享了一条好友C的状态,而C的这条状态实际上是分享B的,但A与B可能并不是好友,即A通过C间接分享了B的状态。
给定你N个人之间的好友关系,好友关系一定是双向的。只要两个人是好友,他们就可以互相转发对方的状态,无论这条状态是他自己的,还是他转发了其他人的。现在请你统计,对于每两个人,他们是否有可能间接转发对方的状态。

输入
第一行1个整数N(1<=N<=300)。
接下来N行每行N个整数,表示一个N*N的01矩阵,若矩阵的第i行第j列是1,表示这两个人是好友,0则表示不是好友。
保证矩阵的主对角线上都是1,并且矩阵关于主对角线对称。
输出
一个N*N的01矩阵,若矩阵的第i行第j列是1,表示这两个人可能间接转发对方的状态,0则表示不可能。
样例输入
5
11000
11100
01100
00011
00011
样例输出
11100
11100
11100
00011
00011
提示
在输入数据中,1与2是好友,2与3是好友,4与5是好友。
因此1、2、3有可能互相转发状态;4、5有可能互相转发状态。这两组人之间则不可能。


#include<iostream>
#include<stack>
using namespace std;
int main() {
int m;
stack<int>he;
cin >> m;
char **n = new char *[m+2];
for (int i = 0; i < m; i++) {
n[i] = new char[m+2];
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < m; j++)
{
cin >> n[i][j];
}
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < m; j++)
{
if (n[i][j] == '1'&&i != j)
{
he.push(j);
}
}
while (he.empty()==false)
{
for (int k = 0; k < m; k++)
{
if (n[he.top()][k] == '1')
{
n[i][k] = '1';
}
}
he.pop();
}
}

for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
cout << n[i][j];
}cout << endl;
}
system("pause");
}

不知道哪里错了,本地电脑上好好的。
...全文
307 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wallesyoyo 2018-03-02
精选
  • 打赏
  • 举报
回复
你这个算法只更新了一层的关系啊,比如说1和5是好友,5和4是好友,4和3是好友,你仅仅把5号的好友4号更新到1号,却没有把5号好友的好友3号更新进来。 其实把关系网做成图的数据结构,用任意一种图的遍历算法都能实现。
赵4老师 2018-03-02
  • 打赏
  • 举报
回复
去掉 system("pause"); 再试试
天杪 2018-03-02
  • 打赏
  • 举报
回复
顶一下,想了一晚上也没懂哪里错了

64,667

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧