【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]

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