25. Lua 图

-- table 的字段 : name (结点的名称) , adj (与该结点邻接的结点集合)

function name2node( graph , name )  -- 将名称对应到结点邻
	if not graph[name] then  -- 结点不存在,创建新的结点
		graph[name] = { name = name , adj = {} }
		print(#graph)
	end
	return graph[name]
end

-- 构造一个图
function readgraph()
	local graph = {}
	for line in io.lines() do
		local namefrom , nameto  = string.match(line, "(%S+)%s+(%S+)" )  -- 切分行中的两个名称
		-- 查找相应的结点
		local from = name2node( graph , namefrom )
		local to = name2node( graph , nameto )
		from.adj[to] = true   -- 将 to 添加到 from 的邻接集合
	end
	return graph
end

-- 采用深度优先遍历图
function findpath( curr , to , path , visited )
	path = path or {}
	visited = visited or {}25
	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( curr.adj ) do
		local p = findpath(node , to , path , visited)
		if p then return p end
		path [#path] = nil  -- 从路径中删除结点
	end
end

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

g = readgraph()
a = name2node( g , "a" )
b = name2node( g , "b" )
p = findpath( a , b )
if p then printpath(p) end
[root@yfw szrengjing.com]# sudo prosodyctl register user szrengjing.com password szrengjing.com:storage_sql error LuaDBI or LuaSQLite3 are required for using SQL databases but neither are installed szrengjing.com:storage_sql error Please install at least one of LuaDBI and LuaSQLite3. See https://prosody.im/doc/depends modulemanager error Error initializing module 'storage_sql' on 'szrengjing.com': /usr/lib64/prosody/modules/mod_storage_sql.lua:21: No SQL library available stack traceback: [C]: in function 'error' /usr/lib64/prosody/modules/mod_storage_sql.lua:21: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/storagemanager.lua:86: in function 'prosody.core.storagemanager.load_driver' /usr/lib64/prosody/core/storagemanager.lua:111: in function 'prosody.core.storagemanager.get_driver' /usr/lib64/prosody/core/storagemanager.lua:274: in function 'prosody.core.storagemanager.open' (...tail calls...) /usr/lib64/prosody/modules/mod_authz_internal.lua:25: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/usermanager.lua:66: in function 'prosody.core.usermanager.initialize_host' /usr/lib64/prosody/util/prosodyctl.lua:86: in function 'prosody.util.prosodyctl.adduser' /bin/prosodyctl:593: in field '?' /bin/prosodyctl:745: in upvalue 'func' /usr/lib64/prosody/util/async.lua:149: in function </usr/lib64/prosody/util/async.lua:147> storagemanager error Failed to load storage driver plugin sql on szrengjing.com: /usr/lib64/prosody/modules/mod_storage_sql.lua:21: No SQL library available stack traceback: [C]: in function 'error' /usr/lib64/prosody/modules/mod_storage_sql.lua:21: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/storagemanager.lua:86: in function 'prosody.core.storagemanager.load_driver' /usr/lib64/prosody/core/storagemanager.lua:111: in function 'prosody.core.storagemanager.get_driver' /usr/lib64/prosody/core/storagemanager.lua:274: in function 'prosody.core.storagemanager.open' (...tail calls...) /usr/lib64/prosody/modules/mod_authz_internal.lua:25: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/usermanager.lua:66: in function 'prosody.core.usermanager.initialize_host' /usr/lib64/prosody/util/prosodyctl.lua:86: in function 'prosody.util.prosodyctl.adduser' /bin/prosodyctl:593: in field '?' /bin/prosodyctl:745: in upvalue 'func' /usr/lib64/prosody/util/async.lua:149: in function </usr/lib64/prosody/util/async.lua:147> storagemanager warn Falling back to null driver for account_roles storage on szrengjing.com szrengjing.com:storage_sql error LuaDBI or LuaSQLite3 are required for using SQL databases but neither are installed szrengjing.com:storage_sql error Please install at least one of LuaDBI and LuaSQLite3. See https://prosody.im/doc/depends modulemanager error Error initializing module 'storage_sql' on 'szrengjing.com': /usr/lib64/prosody/modules/mod_storage_sql.lua:21: No SQL library available stack traceback: [C]: in function 'error' /usr/lib64/prosody/modules/mod_storage_sql.lua:21: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/storagemanager.lua:86: in function 'prosody.core.storagemanager.load_driver' /usr/lib64/prosody/core/storagemanager.lua:111: in function 'prosody.core.storagemanager.get_driver' /usr/lib64/prosody/core/storagemanager.lua:274: in function 'prosody.core.storagemanager.open' (...tail calls...) /usr/lib64/prosody/modules/mod_authz_internal.lua:26: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/usermanager.lua:66: in function 'prosody.core.usermanager.initialize_host' /usr/lib64/prosody/util/prosodyctl.lua:86: in function 'prosody.util.prosodyctl.adduser' /bin/prosodyctl:593: in field '?' /bin/prosodyctl:745: in upvalue 'func' /usr/lib64/prosody/util/async.lua:149: in function </usr/lib64/prosody/util/async.lua:147> storagemanager error Failed to load storage driver plugin sql on szrengjing.com: /usr/lib64/prosody/modules/mod_storage_sql.lua:21: No SQL library available stack traceback: [C]: in function 'error' /usr/lib64/prosody/modules/mod_storage_sql.lua:21: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/storagemanager.lua:86: in function 'prosody.core.storagemanager.load_driver' /usr/lib64/prosody/core/storagemanager.lua:111: in function 'prosody.core.storagemanager.get_driver' /usr/lib64/prosody/core/storagemanager.lua:274: in function 'prosody.core.storagemanager.open' (...tail calls...) /usr/lib64/prosody/modules/mod_authz_internal.lua:26: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/usermanager.lua:66: in function 'prosody.core.usermanager.initialize_host' /usr/lib64/prosody/util/prosodyctl.lua:86: in function 'prosody.util.prosodyctl.adduser' /bin/prosodyctl:593: in field '?' /bin/prosodyctl:745: in upvalue 'func' /usr/lib64/prosody/util/async.lua:149: in function </usr/lib64/prosody/util/async.lua:147> storagemanager warn Falling back to null driver for account_roles storage on szrengjing.com szrengjing.com:storage_sql error LuaDBI or LuaSQLite3 are required for using SQL databases but neither are installed szrengjing.com:storage_sql error Please install at least one of LuaDBI and LuaSQLite3. See https://prosody.im/doc/depends modulemanager error Error initializing module 'storage_sql' on 'szrengjing.com': /usr/lib64/prosody/modules/mod_storage_sql.lua:21: No SQL library available stack traceback: [C]: in function 'error' /usr/lib64/prosody/modules/mod_storage_sql.lua:21: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/storagemanager.lua:86: in function 'prosody.core.storagemanager.load_driver' /usr/lib64/prosody/core/storagemanager.lua:111: in function 'prosody.core.storagemanager.get_driver' /usr/lib64/prosody/core/storagemanager.lua:274: in function 'prosody.core.storagemanager.open' (...tail calls...) /usr/lib64/prosody/modules/mod_auth_internal_hashed.lua:23: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/usermanager.lua:95: in function 'prosody.core.usermanager.initialize_host' /usr/lib64/prosody/util/prosodyctl.lua:86: in function 'prosody.util.prosodyctl.adduser' /bin/prosodyctl:593: in field '?' /bin/prosodyctl:745: in upvalue 'func' /usr/lib64/prosody/util/async.lua:149: in function </usr/lib64/prosody/util/async.lua:147> storagemanager error Failed to load storage driver plugin sql on szrengjing.com: /usr/lib64/prosody/modules/mod_storage_sql.lua:21: No SQL library available stack traceback: [C]: in function 'error' /usr/lib64/prosody/modules/mod_storage_sql.lua:21: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/storagemanager.lua:86: in function 'prosody.core.storagemanager.load_driver' /usr/lib64/prosody/core/storagemanager.lua:111: in function 'prosody.core.storagemanager.get_driver' /usr/lib64/prosody/core/storagemanager.lua:274: in function 'prosody.core.storagemanager.open' (...tail calls...) /usr/lib64/prosody/modules/mod_auth_internal_hashed.lua:23: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/usermanager.lua:95: in function 'prosody.core.usermanager.initialize_host' /usr/lib64/prosody/util/prosodyctl.lua:86: in function 'prosody.util.prosodyctl.adduser' /bin/prosodyctl:593: in field '?' /bin/prosodyctl:745: in upvalue 'func' /usr/lib64/prosody/util/async.lua:149: in function </usr/lib64/prosody/util/async.lua:147> storagemanager warn Falling back to null driver for accounts storage on szrengjing.com szrengjing.com:storage_sql error LuaDBI or LuaSQLite3 are required for using SQL databases but neither are installed szrengjing.com:storage_sql error Please install at least one of LuaDBI and LuaSQLite3. See https://prosody.im/doc/depends modulemanager error Error initializing module 'storage_sql' on 'szrengjing.com': /usr/lib64/prosody/modules/mod_storage_sql.lua:21: No SQL library available stack traceback: [C]: in function 'error' /usr/lib64/prosody/modules/mod_storage_sql.lua:21: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/storagemanager.lua:86: in function 'prosody.core.storagemanager.load_driver' /usr/lib64/prosody/core/storagemanager.lua:111: in function 'prosody.core.storagemanager.get_driver' /usr/lib64/prosody/core/storagemanager.lua:232: in function </usr/lib64/prosody/core/storagemanager.lua:231> (...tail calls...) /usr/lib64/prosody/modules/mod_tokenauth.lua:9: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/moduleapi.lua:171: in function 'prosody.core.moduleapi.depends' /usr/lib64/prosody/modules/mod_auth_internal_hashed.lua:32: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/usermanager.lua:95: in function 'prosody.core.usermanager.initialize_host' /usr/lib64/prosody/util/prosodyctl.lua:86: in function 'prosody.util.prosodyctl.adduser' /bin/prosodyctl:593: in field '?' /bin/prosodyctl:745: in upvalue 'func' /usr/lib64/prosody/util/async.lua:149: in function </usr/lib64/prosody/util/async.lua:147> storagemanager error Failed to load storage driver plugin sql on szrengjing.com: /usr/lib64/prosody/modules/mod_storage_sql.lua:21: No SQL library available stack traceback: [C]: in function 'error' /usr/lib64/prosody/modules/mod_storage_sql.lua:21: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/storagemanager.lua:86: in function 'prosody.core.storagemanager.load_driver' /usr/lib64/prosody/core/storagemanager.lua:111: in function 'prosody.core.storagemanager.get_driver' /usr/lib64/prosody/core/storagemanager.lua:232: in function </usr/lib64/prosody/core/storagemanager.lua:231> (...tail calls...) /usr/lib64/prosody/modules/mod_tokenauth.lua:9: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/moduleapi.lua:171: in function 'prosody.core.moduleapi.depends' /usr/lib64/prosody/modules/mod_auth_internal_hashed.lua:32: in main chunk [C]: in function 'prosody.util.xpcall.xpcall' /usr/lib64/prosody/core/modulemanager.lua:291: in upvalue 'do_load_module' /usr/lib64/prosody/core/modulemanager.lua:378: in function 'prosody.core.modulemanager.load' /usr/lib64/prosody/core/usermanager.lua:95: in function 'prosody.core.usermanager.initialize_host' /usr/lib64/prosody/util/prosodyctl.lua:86: in function 'prosody.util.prosodyctl.adduser' /bin/prosodyctl:593: in field '?' /bin/prosodyctl:745: in upvalue 'func' /usr/lib64/prosody/util/async.lua:149: in function </usr/lib64/prosody/util/async.lua:147> storagemanager warn Falling back to null driver for auth_tokens storage on szrengjing.com Error: No data storage active [root@yfw szrengjing.com]#
11-13
变量名: tonumber, 变量值: <Lua function at 0x00007FF8A9905C90> >> <class 'lupa.lua54._LuaFunction'> 变量名: debug_hook, 变量值: <Lua function at 0x000001DD867D1220> >> <class 'lupa.lua54._LuaFunction'> 变量名: rawequal, 变量值: <Lua function at 0x00007FF8A99062C0> >> <class 'lupa.lua54._LuaFunction'> 变量名: io, 变量值: <Lua table at 0x000001DD867B2040> >> <class 'lupa.lua54._LuaTable'> 变量名: require, 变量值: <Lua function at 0x000001DD867B1640> >> <class 'lupa.lua54._LuaFunction'> 变量名: rawset, 变量值: <Lua function at 0x00007FF8A99065C0> >> <class 'lupa.lua54._LuaFunction'> 变量名: pcall, 变量值: <Lua function at 0x00007FF8A9907C10> >> <class 'lupa.lua54._LuaFunction'> 变量名: table, 变量值: <Lua table at 0x000001DD867B2080> >> <class 'lupa.lua54._LuaTable'> 变量名: rawget, 变量值: <Lua function at 0x00007FF8A99064A0> >> <class 'lupa.lua54._LuaFunction'> 变量名: string, 变量值: <Lua table at 0x000001DD867B15C0> >> <class 'lupa.lua54._LuaTable'> 变量名: rawlen, 变量值: <Lua function at 0x00007FF8A99063D0> >> <class 'lupa.lua54._LuaFunction'> 变量名: warn, 变量值: <Lua function at 0x00007FF8A9905A50> >> <class 'lupa.lua54._LuaFunction'> 变量名: print, 变量值: <Lua function at 0x000001DD867D12B0> >> <class 'lupa.lua54._LuaFunction'> 变量名: next, 变量值: <Lua function at 0x00007FF8A9906B50> >> <class 'lupa.lua54._LuaFunction'> 变量名: setmetatable, 变量值: <Lua function at 0x00007FF8A99061C0> >> <class 'lupa.lua54._LuaFunction'> 变量名: getmetatable, 变量值: <Lua function at 0x00007FF8A99060E0> >> <class 'lupa.lua54._LuaFunction'> 变量名: _G, 变量值: <Lua table at 0x000001DD85B47B30> >> <class 'lupa.lua54._LuaTable'> 变量名: debug, 变量值: <Lua table at 0x000001DD867B1D00> >> <class 'lupa.lua54._LuaTable'> 变量名: collectgarbage, 变量值: <Lua function at 0x00007FF8A9906740> >> <class 'lupa.lua54._LuaFunction'> 变量名: select, 变量值: <Lua function at 0x00007FF8A9907A40> >> <class 'lupa.lua54._LuaFunction'>变量名: utf8, 变量值: <Lua table at 0x000001DD867B1600> >> <class 'lupa.lua54._LuaTable'> 变量名: math, 变量值: <Lua table at 0x000001DD867B1580> >> <class 'lupa.lua54._LuaTable'> 变量名: new_write, 变量值: <Lua function at 0x000001DD867D1430> >> <class 'lupa.lua54._LuaFunction'> 变量名: dofile, 变量值: <Lua function at 0x00007FF8A9907810> >> <class 'lupa.lua54._LuaFunction'> 变量名: simple_handler, 变量值: <function LuaDebugger._setup_lua_output_redirect_safe.<locals>.simple_handler at 0x000001DD8675DAB0> >> <class 'function'> 变量名: python, 变量值: <Lua table at 0x000001DD867B2100> >> <class 'lupa.lua54._LuaTable'> 变量名: python_debug_hook, 变量值: <bound method LuaDebugger._debug_hook of <cls.utils.script_manage.debugger3.LuaDebugger object at 0x000001DD8643FF10>> >> <class 'method'> 变量名: os, 变量值: <Lua table at 0x000001DD867B1A40> >> <class 'lupa.lua54._LuaTable'> 变量名: load, 变量值: <Lua function at 0x00007FF8A9907370> >> <class 'lupa.lua54._LuaFunction'> 变量名: _VERSION, 变量值: Lua 5.4 >> <class 'str'> 变量名: loadfile, 变量值: <Lua function at 0x00007FF8A9906F80> >> <class 'lupa.lua54._LuaFunction'> 变量名: error, 变量值: <Lua function at 0x00007FF8A9906070> >> <class 'lupa.lua54._LuaFunction'> 变量名: package, 变量值: <Lua table at 0x000001DD85B47EB0> >> <class 'lupa.lua54._LuaTable'> 变量名: pairs, 变量值: <Lua function at 0x00007FF8A9906C50> >> <class 'lupa.lua54._LuaFunction'> 变量名: assert, 变量值: <Lua function at 0x00007FF8A99079A0> >> <class 'lupa.lua54._LuaFunction'> 变量名: ipairs, 变量值: <Lua function at 0x00007FF8A9906E40> >> <class 'lupa.lua54._LuaFunction'> 变量名: new_print, 变量值: <Lua function at 0x000001DD867D12B0> >> <class 'lupa.lua54._LuaFunction'> 变量名: tostring, 变量值: <Lua function at 0x00007FF8A9907E70> >> <class 'lupa.lua54._LuaFunction'> 变量名: type, 变量值: <Lua function at 0x00007FF8A9906AA0> >> <class 'lupa.lua54._LuaFunction'> 变量名: coroutine, 变量值: <Lua table at 0x000001DD867B1480> >> <class 'lupa.lua54._LuaTable'> 变量名: xpcall, 变量值: <Lua function at 0x00007FF8A9907D10> >> <class 'lupa.lua54._LuaFunction'>
12-16
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值