- 论坛徽章:
- 0
|
数据.zip
(236.03 KB, 下载次数: 33)
本人想做的是这样一件事:
文件seeds_list.txt为初始节点,文件Adjacency_List.txt为一个以邻接表形式存储的图。根据seeds_list.txt中的初始节点,利用邻接矩阵实现通路查找,先找到与初始节点相同的点,再从此节点开始随机选取与其相连的下一个节点,再将其视为初始节点重复前一步骤,直到无法再找到下一个相连的节点,将此过程中进过的顶点记录下来。最后得到的是N条(N的大小与seeds_list.txt文件中顶点个数相同)通路。- use warnings;
- use strict;
- my ($seeds,$j,$k);
- my (@path,@protein);
- open(my $path_list,"Adjacency_List.txt")or die $!;
- while(my $path = <$path_list>){
- chomp($path);
- my @temp = split/\t/,$path;
- my @add = [$temp[0],$temp[1]];
- push @protein,@add;
- }
- close($path_list);
- open(my $seeds_list,"seeds_list.txt")or die $!;
- open(OUTPUT,">>path_list.txt")or die $!;
- while($seeds = <$seeds_list>){
- chomp($seeds);
- $j = 0;
- &find_next_protein($seeds);
- # for my $i(0 .. $#path){ #该for循环用于输出数组path
- # print OUTPUT "$path[$i]\t";
- # }
- print OUTPUT "\n";
- # @path = ();
- }
- close();
- sub find_next_protein{
- if($j <= $#protein){
- if($protein[$j][0] eq $seeds){
- #push @path,$seeds;
- print OUTPUT "$seeds\t";
- my @next_temp = split/ /,$protein[$j][1];
- my $choic_number = int(rand($#next_temp));
- $seeds = $next_temp[$choic_number];
- if($protein[$j][0] ne $seeds){
- &find_next_protein($seeds);
- }
- }else{
- # if($j <= $#protein){
- $j++;
- &find_next_protein($seeds);
- # }
- }
- }
- }
复制代码 捣腾了很久,还是没搞定,急死了~~~
麻烦各位大侠看看,不吝赐教! |
|