lua 自学笔记4 table-图

lua自学的代码来自于《Lua程序设计(第二版)》

看到图这里讲实话,真心的疑问太多搞了好久,对书上这里的代码有几个地方想不通,而且打上去呢也不能正常运行,就根据自己的理解讲书上的代码改了一下,本来是想根据自己以前学习别的计算机语言的基础来学lua,可是发现以前的好像对于图学的不是很扎实,所以理解起来有些困难,改良了一下,是以下的效果,不知道还是不是图,要是大家觉得我理解有误,指导一下哈,最底下有测试结果,也就是我所理解的。

(10)图

local function name2node (graph,name)
	if not graph[name] then
		graph[name] = {name = name,adj = {}}
	end
	return graph[name]
end


-- 从显示屏中读取一行数据,一行包含两个节点这样的格式输入
function readgraph()
	local graph = {}
	for line in io.lines() do
		--print(line)
		if line == "0" then return graph end//这个在书中是没有此行代码的,因为我不知道io.lines()输入什么才会自动结束,所以只能自己加这个判断
		local namefrom,nameto = string.match(line,"(%S+)%s+(%S+)")
		local from = name2node(graph,namefrom)
		local to = name2node(graph,nameto)
		from.adj[nameto] = true
	end
	return graph
end


-- 找curr到to节点的路径
function findpath(graph,curr,to,path,visited)
	path = path or {}
	visited = visited or {}
	if visited[curr] then 
		return nil
	end
	visited[curr] = true
	path[#path + 1] = curr
	if curr == to then
		return path
	end
	for node in pairs(graph[curr].adj) do
		local p = findpath(graph,node,to,path,visited)
		if p then return p end
	end
end

-- 打印路径
function printpath(path)
	for i = 1,#path do
		print(path[i])
	end
end

测试:

g = readgraph()
p = findpath(g,"a","h")
if p then printpath(p) end

屏幕上输入:

a b

b h

h c

结果:

a

b

h

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值