24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1200  |  回复: 10

fanyuan315

新虫 (初入文坛)

[求助] 求教:如果找到有向无环图里各点到顶点的深度呢?拜托了!已有2人参与

各位大侠:
      请求高人指点,我是做一个排序问题,问题已经转化成了一个有向无环图,想通过这个图找到每个点所在的层次关系,例如这样的一个有向无环图
    最后我想要得到的结果是,点0,1,2在第一层,3,4在第二层,5,6在第三层,7在第四层,8在第五层,9在第六层……
       请问,如何用c语言实现呢?哪怕给个算法思想也行啊,我对数组比较熟,但是不知道能否实现它?
        拜托了!

求教:如果找到有向无环图里各点到顶点的深度呢?拜托了!
有向无环图.jpg
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

锐利的碎片

木虫 (正式写手)

star watcher

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
fanyuan315: 金币+2, 有帮助, 谢谢您的提示,原理上我明白,现在就差具体的用程序实现了。感谢您的帮助! 2014-07-24 14:35:01
2楼2014-07-24 11:10:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

枪下游魂

木虫 (著名写手)

不是很明白你的意思,你的意思是你已经知道了这样一个结构,是想构建出来,然后如果输入9,能输出它的从属关系?
3楼2014-07-28 09:29:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fanyuan315

新虫 (初入文坛)

引用回帖:
3楼: Originally posted by 枪下游魂 at 2014-07-28 09:29:02
不是很明白你的意思,你的意思是你已经知道了这样一个结构,是想构建出来,然后如果输入9,能输出它的从属关系?

您好:
     其实我的意思是根据上面的有向无环图,得到每个点在第几层,如上图所示0,1,2在第一层了,3和4在第二层,5,6在第三层,7在第四层,8在第五层,9在第六层。只要把大的层次关系找出来就行,至于同一层里面的关系不重要了就。
4楼2014-07-28 15:54:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fanyuan315

新虫 (初入文坛)

引用回帖:
3楼: Originally posted by 枪下游魂 at 2014-07-28 09:29:02
不是很明白你的意思,你的意思是你已经知道了这样一个结构,是想构建出来,然后如果输入9,能输出它的从属关系?

我程序里表达上面那个有向无环图使用一个二维数组表示的,比如[[0,3],[1,3],[2,4],[3,5],[3,6],[4,6],[6,7],[7,8],[8,9]],我不太会链表表达方式,平时主要用的就是数组,但是能否得到我想要的结果呢?理想的结果是我想得到一个这样的数组[[0,1,2,……],[3,4,……],[5,6,……],[7,……][8,……][9,……]],我的意思您懂了吗?谢谢您,帮我想想,给我点启发吧!如果必须要用链表解,我就看看数据结构方面的参考书。
5楼2014-07-28 16:00:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

枪下游魂

木虫 (著名写手)

【答案】应助回帖

引用回帖:
5楼: Originally posted by fanyuan315 at 2014-07-28 16:00:46
我程序里表达上面那个有向无环图使用一个二维数组表示的,比如,我不太会链表表达方式,平时主要用的就是数组,但是能否得到我想要的结果呢?理想的结果是我想得到一个这样的数组,我的意思您懂了吗?谢谢您,帮我 ...

你的意思是每一层用一个数组表示吧?
这个我没仔细想过,但是如果假设你已经知道了每一层的元素,以及层与层之间的从属关系,我觉得用struct结构数组会比较简单吧?也就是每个元素都是一个结构,这个结构里面有所属层号,上属元素,下属元素。
比如说
struct chain
{ int layer_number;
   int up_element;
   int down_element;
} *elements;

但是按照你的思路,似乎你不关心这一层元素与其它层元素的关系?
那以你的二维数组为基础,从最后一行的最后一个元素,比如说9开始,可以往前做一个搜索:9的起始层数为0,然后9和8在一个一维数组里且9是后面那个,9的层数+1;8和7在一个一维数组里且8是后面那个,9的层数+1;以此类推,直到遍历完所有行。这里面要设一个if,就是如果一个数字在两个数组里都出现且都是后面那个,那层数不变。最后把同层元素放在一个数组里
中间应该还有可以节省时间的地方。
6楼2014-07-29 08:10:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fanyuan315

新虫 (初入文坛)

引用回帖:
6楼: Originally posted by 枪下游魂 at 2014-07-29 08:10:41
你的意思是每一层用一个数组表示吧?
这个我没仔细想过,但是如果假设你已经知道了每一层的元素,以及层与层之间的从属关系,我觉得用struct结构数组会比较简单吧?也就是每个元素都是一个结构,这个结构里面有所 ...

首先非常感谢您的热心,我是新虫,几乎很少上论坛来寻求帮助,遇到您,是我的幸运了!
您说的意思给我了一点启发,我也想过首先先找第一层里的元素,这里是0,1,2,他们的层数就是0,然后从那个二维数组里面找到在这三个元素后面的数,3和4,他俩的层数就是0+1了,然后再找3和4后面的数,5和6,层数就是2,这里面遍历的时候有重复的话就要删掉,以此类推……直到最终找到最下面的层。
我想用我熟悉的数组来编,可能遍历的时候要费点劲,而且数组大小不好控制,还要把重复的数删掉。因为最后我是要变成大规模的,上万个数的这种情况。
7楼2014-07-29 08:54:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fanyuan315

新虫 (初入文坛)

引用回帖:
6楼: Originally posted by 枪下游魂 at 2014-07-29 08:10:41
你的意思是每一层用一个数组表示吧?
这个我没仔细想过,但是如果假设你已经知道了每一层的元素,以及层与层之间的从属关系,我觉得用struct结构数组会比较简单吧?也就是每个元素都是一个结构,这个结构里面有所 ...

抱歉,我级别太低了,没有红花送给你都!
8楼2014-07-29 08:58:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

枪下游魂

木虫 (著名写手)

引用回帖:
7楼: Originally posted by fanyuan315 at 2014-07-29 08:54:20
首先非常感谢您的热心,我是新虫,几乎很少上论坛来寻求帮助,遇到您,是我的幸运了!
您说的意思给我了一点启发,我也想过首先先找第一层里的元素,这里是0,1,2,他们的层数就是0,然后从那个二维数组里面找到在 ...

过奖了,我本身不是搞编程的,只不过现在的工作和编程相关。
这样可能需要动态的二维数组了。一个问题是二维数组每一层的维数是否可以不同?因为我都是编矩阵,所以没尝试过不同维数,如果可以的话,你需要一个数组保存每层的维数,和一个动态生成一维数组的子程序,然后在生成二维数组中循环调用它们。
9楼2014-07-29 09:22:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fanyuan315

新虫 (初入文坛)

引用回帖:
9楼: Originally posted by 枪下游魂 at 2014-07-29 09:22:41
过奖了,我本身不是搞编程的,只不过现在的工作和编程相关。
这样可能需要动态的二维数组了。一个问题是二维数组每一层的维数是否可以不同?因为我都是编矩阵,所以没尝试过不同维数,如果可以的话,你需要一个数 ...

您说您是编矩阵的?呵呵,很巧了,我上面那个有向无环图其实就是用邻接矩阵来表示的,是一个10*10的矩阵,出现1的时候,它的行和列就是指两个元素的先后关系。
最终结果我想要一个二维数组,如果是静态的维数肯定都是一样的,我会把数组大小变的很大,肯定能保证最多的容量。
按照您的意思,看来我还得是用链表了,这就是动态数组,我试着编一下吧。要不总想不实践总归还是发现不了问题的。
求教:如果找到有向无环图里各点到顶点的深度呢?拜托了!-1
IMG_20140729_092749.jpg

10楼2014-07-29 09:35:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 fanyuan315 的主题更新
信息提示
请填处理意见