2017年8月6日 星期日

103模 M3P31~M4P42

Public Class Form1                       ‘M3P31 資料結構-是否為樹
    Const MaxN As Integer = 20
    Dim adj(MaxN, MaxN) As Boolean
    Dim nds(MaxN) As Boolean
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Hide()
        FileOpen(1, "in1.txt", OpenMode.Input)
        FileOpen(2, "in2.txt", OpenMode.Input)
        FileOpen(3, "out.txt", OpenMode.Output)
        For fn = 1 To 2
            If fn = 2 Then PrintLine(3)
            Dim n As Short = LineInput(fn)
            For k = 1 To n
                Dim s As String = LineInput(fn)
                PrintLine(3, m3p31(s))
            Next
        Next
        End
    End Sub
    Function m3p31(ByVal s As String) As String
        m3p31 = "T"
        ttrim(s, "  ", " ") : ttrim(s, ", ", ",") : ttrim(s, " ,", ",")   ‘2空轉1空、 去逗後空、 去逗前空
        Dim egs() = s.Split(" ")
        Dim egcnt As Integer = egs.Length  '邊數
        Dim st As Integer  ' dfs的起點
        Array.Clear(adj, 0, MaxN * MaxN) : Array.Clear(nds, 0, MaxN)
        For i = 0 To egcnt - 1
            Dim xy() = egs(i).Split(",")
            Dim x As Integer = xy(0), y As Integer = xy(1)
            adj(x, y) = True : adj(y, x) = True
            nds(x) = True : nds(y) = True
            st = x
        Next
        Dim ndcnt As Integer = 0  '節點數
        For i = 0 To MaxN
            If nds(i) Then ndcnt += 1
        Next
        If ndcnt <> egcnt + 1 Then
            Return "F"
        Else
            dfs(st)
            For i = 0 To MaxN
                If nds(i) Then Return "F" '有節點未訪
            Next
        End If
    End Function
    Sub dfs(ByVal st As Integer)
        nds(st) = False  '訪過 註銷
        For v = 0 To MaxN
            If nds(v) And adj(st, v) Then dfs(v)
        Next
    End Sub
    Sub ttrim(ByRef s As String, ByVal a As String, ByVal b As String)           ‘a 取代為 b
        Do Until InStr(s, a) = 0
            s = s.Replace(a, b)
        Loop
    End Sub

End Class


Public Class Form1              ‘M3P32 資料結構-樹葉節點到根節點之路徑
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        FileOpen(1, "in1.txt", OpenMode.Input)
        FileOpen(2, "in2.txt", OpenMode.Input)
        FileOpen(3, "out.txt", OpenMode.Output)
        For fn = 1 To 2
            If fn=2 Then PrintLine(3)
            Dim n As Integer = LineInput(fn)
            For i = 1 To n
                If i > 1 Then LineInput(fn)
                Dim nds As Integer = LineInput(fn)
                Dim par(100) As Integer   '父是誰
                Dim chi(100) As Boolean   '是否有子?
                For j = 1 To nds
                    Dim xy() = LineInput(fn).Split(",")
                    Dim x As Integer = xy(0), y As Integer = xy(1)
                    par(x) = y     ' x 的父是 y
                    chi(y) = True  ' y 有子
                Next
 Rem 以下為測試用多印的
                For j = 0 To nds - 1  '印各節點的父,是否有子?
                    Print(3, j & ": " & par(j) & " :" & IIf(chi(j), "Y", "N") & "  ")
                Next
                PrintLine(3)
Rem 以上為多印的
                For j = 0 To nds - 1
                    If Not chi(j) Then  ‘沒有兒子即是葉節點
                        Dim cnt = 0
                        Dim s As String = ""
                        Dim p = par(j)
                        Do Until par(p) = 99
                            If cnt > 0 Then s &= ("," & p) Else s &= p
                            cnt += 1
                            p = par(p)
                        Loop
                        If cnt > 0 Then s = "{" & s & "}" Else s = "N"
                        PrintLine(3, j & ":" & s)
                    End If
                Next
            Next
        Next
        End
    End Sub End Class

Related Posts:

  • To Z2A 程式選訓(2018-103,110) 20180103-1連寫數整除 給一個 正整數 p , 然後找一個最小的正整數n,數123…n串成的數字x使得 p 整除 x In1.txt 3 2 6 8 In2.txt 3 7 15 17 Out.txt 2 2 6 11 5 21… Read More
  • To Z2A 程式選訓(1227-4,1227-5)1227-4_撲克21點(參考解) 輸入範例: 【in1.txt】 3 0,2,6 13,10,11 27,36,23 【in2.txt】 3 26,42,8 11,25,30 39,21,22 輸出範例: 【out.txt】 21 21 Bom … Read More
  • M2P12:102模P12樂透 及Z2A程式 8/29題目參考 M2P11 : 102模P11 字串中的阿拉伯數字   http://rs-vb.blogspot.tw/2016/10/z2am2p11.html M3P11 : 103模P11 判斷是否為質數 http://rs-vb.blogspot.tw/2016/10/z2am3p1… Read More
  • To Z2A 程式選訓(2018-124) 資2忠程式選訓   寒輔進度 http://rs-vb.blogspot.tw/2017/04/z2ay7m3-7-17-4.html  去年的練習題(各年較簡單題型) http://rs-vb.blogspot.tw/2017/12/to-z2a.ht… Read More
  • Z2AY7M3 練習-7 (17題題單及參考-4) 4/10(一)測驗題單 (題目名加上連結的表示範例完成) 假設由文字方塊輸入,呼叫 Function MyPxx( S As String ) As String後傳回要輸出的字串 以下只有M5P11附主程式部份,其餘類似 105模擬 M5P11 數學問題:質數 … Read More

0 意見:

張貼留言