楼主: 笨小鸭
4532 0

[问答] 各位大神,急求程序解答 [推广有奖]

  • 21关注
  • 3粉丝

教师

讲师

42%

还不是VIP/贵宾

-

威望
0
论坛币
13 个
通用积分
12.0139
学术水平
5 点
热心指数
5 点
信用等级
3 点
经验
5676 点
帖子
311
精华
0
在线时间
232 小时
注册时间
2011-9-30
最后登录
2025-4-17

楼主
笨小鸭 发表于 2022-1-11 10:06:27 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
这是我用R语言实现的步骤:
(1)用R语言把随机生成的二维矩阵行之间的距离计算出来记为length,将行标号记为i和j;
(2)将i和j处理成字符,作为路径结点Nodes;(处理方法有点笨拙)
(3)用最小生成树的R程序寻找点之间的最短路径;
程序
e <- read.csv("C:/Users/SYY/Desktop/example_1.csv")
dim(e)
colnames(e) <- c('start', 'end', 'length')
e$start <- as.character(e$start)
e$end <- as.character(e$end)
#最小生成树 -------------------------------------------------------------------
Nodes <- seq(1, m0+n, by = 1)##生成字符串数组,长度为m0+n-1
Nodes <- as.character(Nodes)
ori_trees<-hash()
#创建空哈希,顶点为键——值
for (i in Nodes){
  .set(ori_trees, keys = i, values = i)
}
#将顶点存入哈希中
find_nodes<-function(x){
  if(ori_trees[[x]]!=x){#双亲节点和当前节点不一致,说明这条边添加了minmum spanning tree
    ori_trees[[x]] <- find_nodes(ori_trees[[x]])
    #找到双亲节点未变化的点
    return(ori_trees[[x]])
  }
  else{
    return(x)
  }
}
minimum_spanning_tree <- data.frame(start=character(),end=character(),length=numeric(),stringsAsFactors = F)
#定义最小生成树
t<-length(Nodes)-1
#定义循环次数,n为需要添加的边数=顶点数-1
s<-0
for(i in 1:(dim(e)[1])){
  if(s==t){
    break
  }
  if(find_nodes(e[i,1]) != find_nodes(e[i, 2])){
    #双亲节点不一致
    ori_trees[[find_nodes(e[i, 2])]] <- find_nodes(e[i, 1])#改变该顶点的双亲节点
    minimum_spanning_tree <- rbind(minimum_spanning_tree, e[i, ])#将符合条件的边
    s<-s+1
  }
}
s
minimum_spanning_tree
问题是实现结果中有几个点的自由度超过2(一个点与3个点同时连接),如何限制结点的自由度不超过2呢?
> minimum_spanning_tree    start end length6      2   3  0.7434      1   5  1.38315     5   6  1.6729      2   6  1.81713     4   5  2.015其中结点5出现了3次,如何限制每个结点最多出现2次呢?本人不是计算机专业的,还请各位大佬指点下,如何在这个程序基础上修改。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:length 最小生成树 Nodes 处理方法 leng

1641866470174_D05156B1-C324-4d42-A6AA-4DEFFC08FFC4.png (3.49 KB)

程序运行结果

程序运行结果

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-23 05:14