【Lua】ElJudge 003 Contest Table

给出N个球队的比赛结果(胜负表),让排列出来一个“名次表”,保证这个“名次表”中,排在第i位的总是和在排在第i+1位的比赛中胜出


SAMPLE INPUT:
4
#
+#
-+#
-+-#
SAMPLE OUTPUT:
1 3 4 2 

算法就是搜索一下就可以了,很简单的

代码:

R=function() return io.stdin:read("*n") end
charAt=function(str,i) return string.sub(str,i,i) end
local n=R()
board,used,win={},{},{}
_=io.read()  --读入空行
for i=1,n do board[i]=io.read() end
for i=1,n do used[i]=false end
for i=1,n do win[i]={} end
for i=1,n do
	for j=1,string.len(board[i])-1 do
		if charAt(board[i],j)=='+' then
			win[i][j],win[j][i]=true,false
		else win[i][j],win[j][i]=false,true
		end
	end
end
ans={}
t=0
function find(k)
	if k==1 then
		for i=1,n do
			used[i]=true
			ans[k]=i
			if find(k+1) then
				return true
			end
			used[i]=false
		end
	elseif k>n then
		return true
	else
		for i=1,n do
			if not used[i] and win[ans[k-1]][i] then
				used[i]=true
				ans[k]=i
				if find(k+1) then
					return true
				end
				used[i]=false
			end
		end
	end
	return false
end
find(1)
print (table.concat(ans,' '))

注意:

1、变量命名时千万不要起table,虽然不是关键字,但是在调用table.concat时就出错了。。。找了半天。。。

2、table.concat可以引用table中的元素并在每个两个之间用给定的分割串隔开,效果等同于table[1]..table[2].. …… ..table[n]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章