2012年10月2日 星期二
100正式Problem 2-2:二維陣列的應用
假設地圖上的每個小單位都有一個(x, y)座標,其中x 代表該單位的橫列值,y 代表縱列值。地圖上「最左上角」的小單位其座標值是(1, 1),該橫列第15 個小單位其座標值是(1,
15);第15 個橫列的第1 個小單位是(15, 1),該橫列最後1 個小單位是(15, 15)。如果我們任意給定地圖上「起點」及「終點」的座標,在地圖上此兩點均為「空白」,請問從起點到終點,在最多只能通過若干個空白單位的限制條件下,是否有可通行的路徑?(任一單位只能透過上、下、左、右四個方向連到下一單位。)
輸入說明:
第 1 行是最多能通過的空白單位數目(不包括起點及終點)。
第 2~16 行是地圖的資料,依序代表地圖上的每個橫列。每行有15 個符號,依序代表地圖上
每個橫列的15 個小單位。若符號為「0」,表示該單位為「空白」;若為「1」,表示已「填色」。
第 17 行為空行。
第 18、19 行是檢測第1 組資料。
第 18 行是「起點座標」,第1 個數字是起點的x 座標,空格後接著「y 座標」。
第 19 行是「終點座標」,第1 個數字是終點的x 座標,空格後接著「y 座標」。
第 20 行為空行。
第 21、22 行是檢測第2 組資料。
第 21 行是「起點座標」,第1 個數字是起點的x 座標,空格後接著「y 座標」。
第 22 行是「終點座標」,第1 個數字是終點的x 座標,空格後接著「y 座標」。
輸出說明:
第 1、2 行是輸入檔案1 的檢查結果。
第 1 行輸出第1 組檢測資料,在通過空白單位數目限制下,是否有可通行的路徑,若有則輸
出「TRUE」,沒有則輸出「FALSE」。
第 2 行輸出第2 組檢測資料的檢查結果,其值是「TRUE」或「FALSE」。
第 3 行是空白。
第 4、5 行是輸入檔案2 的檢查結果。
第 4 行輸出第1 組檢測資料的檢查結果,其值是「TRUE」或「FALSE」。
第 5 行輸出第2 組檢測資料的檢查結果,其值是「TRUE」或「FALSE」。
(輸出均為大寫,選手請注意。)
輸入檔案 1:【檔名:in1.txt】
15
011111110010000
000000000010000
000001000010000
000001000011110
000001000010010
111110100010100
000001011000100
000001001000100
100001001011111
100000001000000
100111111111111
100000100110000
100000100001000
100000000001000
100000000001000
3 3
5 13
14 11
8 5
輸入檔案 2:【檔名:in2.txt】
15
010000000000000
010000000111100
010000000100100
000000000100100
111111111100100
000001000000100
000001001000100
000001001000100
000001001000100
000001001000000
000001001111111
000001000100000
000001000100000
000001000100000
000000000100000
3 3
6 3
10 7
10 10
輸出檔案:【檔名:out.txt】
FALSE
TRUE
FALSE
TRUE
訂閱:
張貼留言 (Atom)
Dim K(16, 16) As Integer
回覆刪除Private Sub Form_Load()
Open App.Path & "\in1.txt" For Input As #1
Open App.Path & "\in2.txt" For Input As #2
Open App.Path & "\out.txt" For Output As #3
For L = 1 To 2
Input #L, m
m = m + 6
For i = 1 To 15
Line Input #L, x
For j = 1 To 15
K(i, j) = Mid(x, j, 1)
Next
Next
For H = 1 To 2
Input #L, O
Input #L, x1, y1
Input #L, x2, y2
Call abc(x1, y1, x2, y2, m)
Next
Print #3,
Next
Close
Close
Close
End
End Sub
Sub abc(x1, y1, x2, y2, m)
K(x1, y1) = 5
n = 4
Do Until K(x2, y2) <> 0 Or n = 230
n = n + 1
For i = 1 To 15
For j = 1 To 15
If K(i, j) = n Then
If K(i + 1, j) = 0 Then K(i + 1, j) = n + 1
If K(i - 1, j) = 0 Then K(i - 1, j) = n + 1
If K(i, j + 1) = 0 Then K(i, j + 1) = n + 1
If K(i, j - 1) = 0 Then K(i, j - 1) = n + 1
End If
Next
Next
Loop
If K(x2, y2) <> 0 And K(x2, y2) <= m Then Print #3, "TRUE"
If K(x2, y2) = 0 Or K(x2, y2) > m Then Print #3, "FALSE"
For i = 1 To 15
For j = 1 To 15
If K(i, j) >= 5 Then K(i, j) = 0
Next
Next
End Sub
Dim K(16, 16) As Integer
回覆刪除Private Sub Form_Load()
Open App.Path & "\in1.txt" For Input As #1
Open App.Path & "\in2.txt" For Input As #2
Open App.Path & "\out.txt" For Output As #3
For L = 1 To 2
Input #L, m
m = m + 6
For i = 1 To 15
Line Input #L, x
For j = 1 To 15
K(i, j) = Mid(x, j, 1)
Next
Next
For H = 1 To 2
Input #L, O
Input #L, x1, y1
Input #L, x2, y2
List1.Clear
Call abc(x1, y1, x2, y2, m)
Next
Print #3,
Next
Close
Close
Close
End
End Sub
Sub abc(x1, y1, x2, y2, m)
n = 4
K(x1, y1) = 5
Do Until K(x2, y2) <> 0 Or n = 230
n = n + 1
List1.AddItem x1 & " " & y1
For L = 0 To (List1.ListCount - 1)
a = Split(List1.List(L))
i = a(0): j = a(1)
If i <= 15 And i >= 1 And j <= 15 And j >= 1 And K(i, j) <> 1 Then
If K(i, j - 1) = 0 Then K(i, j - 1) = n + 1: List2.AddItem i & " " & j - 1
If K(i + 1, j) = 0 Then K(i + 1, j) = n + 1: List2.AddItem i + 1 & " " & j
If K(i, j + 1) = 0 Then K(i, j + 1) = n + 1: List2.AddItem i & " " & j + 1
If K(i - 1, j) = 0 Then K(i - 1, j) = n + 1: List2.AddItem i - 1 & " " & j
End If
Next
List1.Clear
For L = 0 To (List2.ListCount - 1)
List1.AddItem List2.List(L)
Next
List2.Clear
Loop
If K(x2, y2) = 0 Or m < K(x2, y2) Then Print #3, "FALSE"
If K(x2, y2) <> 0 And m >= K(x2, y2) Then Print #3, "TRUE"
For i = 1 To 15
For j = 1 To 15
If K(i, j) >= 2 Then K(i, j) = 0
Next
Next
End Sub