子題 2.
在一張地圖上標示有 8個城市,分別稱為「城市 1」到「城市 8」。假設地圖上存在若干單行道,這些單行道直接連接 1個起點城市及 1個終點城市。我們以「二維陣列」表示地圖上的城市及單行道的關係:我們設定一個二維陣列,假設陣列名稱為 a,而 a(i,
j)表示陣列中的元素,其中 i和 j的值介於 1和 8之間。當 a(i,
j)=1時,表示存在一條直接從「城市 i」到「城市 j」的單行道;若 a(i,
j)=0,表示不存在此單行道。問題:在一個給定的陣列資料中,判斷是否存在「正好經過 3條單行道」的道路,該道路從特定的「起點城市」開始,並且在特定的「終點城市」結束。
【註 1】同一條單行道可以在求解的「3條單行道」中重覆使用。
【註 2】若選手找出的道路只使用 1條或 2條單行道,都「不能算」存在此道路。在本題中,
必須是「正好使用 3條單行道」才能算是存在此道路。
【註 3】為了說明方便,題目中假設陣列名稱為 a,但選手撰寫程式時不限定陣列之命名。
輸入說明:第 1~8行表示城市陣列的元素,每一行分為 8個元素,以「逗號」區隔。第 i行的第 j個元素,表示 a(i,
j)的值。例如:第 1行的第 1個元素,表示 a(1,
1)的值;第 1行的第 2個元素,表示 a(1,
2) 的值;第 2行的第 1個元素,表示 a(2,
1) 的值,其餘類推。第 9、10、11、12行,每行分別有 2個元素,也是以「逗號」區隔,表示選手需要檢查的 1組「起點城市」及「終點城市」編號(其值均介於 1和 8之間)。每個檔案檢查 4組資料。
輸出說明:共輸出 4行結果,依序表示輸入檔的 4組起訖城市,是否存在「正好經過 3條單行道」的道路?有則輸出「有路徑」,沒有則輸出「沒路徑」。輸入檔案 1:【檔名:in1.txt】
0, 1, 1, 0, 1, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 1, 1, 0
0, 1, 0, 0, 0, 1, 0, 1
0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 1, 0, 0, 0
0, 1, 0, 1, 0, 0, 0, 0
0, 0, 1, 1, 0, 0, 0, 0
1, 5
2, 3
3, 8
4, 1
輸入檔案 2:【檔名:in2.txt】
0, 0, 1, 0, 1, 0, 1, 0
0, 0, 0, 0, 1, 1, 0, 0
0, 0, 0, 0, 0, 1, 0, 1
0, 0, 0, 0, 0, 0, 1, 0
0, 0, 0, 1, 0, 1, 0, 0
0, 0, 0, 0, 0, 0, 1, 0
0, 0, 0, 0, 0, 0, 0, 1
1, 1, 0, 0, 0, 0 ,0, 0
1, 7
2, 5
3, 6
4, 7
有路徑
沒路徑
有路徑
沒路徑
有路徑
沒路徑
有路徑
沒路徑
in.txt
回覆刪除1, 2, 3
原來可以直接Input #1,X,Y,Z
不用在split!!
Dim a(8, 8) As Byte
Private Sub Form_Load()
Me.Hide
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
'------------------------in1.txt--------------
For i = 1 To 8
For j = 1 To 8
Input #1, a(i, j)
Next j
Next i
Do While Not EOF(1)
ok = False
Input #1, x, Y
For i = 1 To 8
If a(i, Y) = 1 Then
For j = 1 To 8
If a(j, i) = 1 Then
If a(x, j) = 1 Then ok = True
End If
Next j
End If
Next i
If ok = True Then Print #3, "有路徑" Else Print #3, "沒路徑"
Loop
'------------------------in2.txt--------------
Print #3,
For i = 1 To 8
For j = 1 To 8
Input #2, a(i, j)
Next j
Next i
Do While Not EOF(2)
ok = False
Input #2, x, Y
For i = 1 To 8
If a(i, Y) = 1 Then
For j = 1 To 8
If a(j, i) = 1 Then
If a(x, j) = 1 Then ok = True
End If
Next j
End If
Next i
If ok = True Then Print #3, "有路徑" Else Print #3, "沒路徑"
Loop
Close #3
Close #2
Close #1
End
End Sub
Dim P(8, 8)
回覆刪除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
Me.Hide
For i = 1 To 8
For j = 1 To 8
Input #1, P(i, j)
Next
Next
For i = 1 To 4
Input #1, m, n
List1.Clear
Call A1(m, n, n)
Call A2
Next
Print #3, " "
For i = 1 To 8
For j = 1 To 8
Input #2, P(i, j)
Next
Next
For i = 1 To 4
Input #2, m, n
List1.Clear
Call A1(m, n, n)
Call A2
Next
Close
Close
Close
End
End Sub
Sub A1(a, b, c)
If Len(c) = 4 Then
If Right(Trim(c), 1) = Trim(a) Then List1.AddItem c
Else
For i = 1 To 8
If InStr(c, i) = 0 Then Call A1(a, b, c & i)
Next
End If
End Sub
Sub A2()
For i = 0 To List1.ListCount - 1
ch = 0
For j = 1 To 3
m1 = Mid(List1.List(i), j, 1)
m2 = Mid(List1.List(i), j + 1, 1)
If P(m2, m1) = 1 Then ch = ch + 1
Next
If ch = 3 Then Print #3, "有路徑": Exit Sub
Next
Print #3, "沒路徑"
End Sub