Advertisement
Pug_coder

CanonMealy

Jun 2nd, 2021
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.16 KB | None | 0 0
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type AutoMealy struct {
  6.     start int
  7.     state [][]int
  8.     exSignals [][]string
  9. }
  10.  
  11. type UsedMealy struct {
  12.     state [][]int
  13.     exSignals [][]string
  14.     used []int
  15. }
  16. func input(n int, m int, q int, mealy AutoMealy) AutoMealy {
  17.     for i := 0; i < n; i++ {
  18.         for j := 0; j < m; j++ {
  19.             fmt.Scan(&mealy.state[i][j])
  20.         }
  21.     }
  22.     for i := 0; i < n; i++ {
  23.         for j := 0; j < m; j++ {
  24.             fmt.Scan(&mealy.exSignals[i][j])
  25.         }
  26.     }
  27.     mealy.start = q
  28.     return mealy
  29. }
  30. func (newAuto *AutoMealy) NewMealy(n int ,m int) *AutoMealy {
  31.     newAuto.state = make([][]int, n)
  32.     newAuto.exSignals = make([][]string, n)
  33.     for i := 0; i < n; i++ {
  34.         newAuto.state[i] = make([]int, m)
  35.         newAuto.exSignals[i] = make([]string, m)
  36.     }
  37.     return newAuto
  38. }
  39. func (newAuto *UsedMealy) UsedMealy(n int ,m int) *UsedMealy {
  40.     newAuto.state = make([][]int, n)
  41.     newAuto.exSignals = make([][]string, n)
  42.     newAuto.used = make([]int,n)
  43.     for i := 0; i < n; i++ {
  44.         newAuto.state[i] = make([]int, m)
  45.         newAuto.exSignals[i] = make([]string, m)
  46.  
  47.     }
  48.     for i := 0; i < n; i++ {
  49.         newAuto.used[i] = -1
  50.     }
  51.     return newAuto
  52. }
  53. func DFS(usedAuto UsedMealy, mealy AutoMealy, index *int, begin, m int) {
  54.     usedAuto.used[begin] = *index
  55.     (*index)++
  56.     for i := 0; i < m; i++ {
  57.         if usedAuto.used[mealy.state[begin][i]] == -1 {
  58.             DFS(usedAuto, mealy, index, mealy.state[begin][i], m)
  59.         }
  60.     }
  61. }
  62.  
  63. func main() {
  64.     var n, m, q, index int
  65.     var mealy AutoMealy
  66.     var usedAuto UsedMealy
  67.     index = 0
  68.     fmt.Scanf("%d\n", &n)
  69.     fmt.Scanf("%d\n", &m)
  70.     fmt.Scanf("%d\n", &q)
  71.     mealy.NewMealy(n, m)
  72.     usedAuto.UsedMealy(n, m)
  73.     input(n, m, q, mealy)
  74.  
  75.     DFS(usedAuto, mealy, &index, q, m)
  76.  
  77.     for i := 0; i < n; i++ {
  78.         if usedAuto.used[i] != -1 {
  79.             usedAuto.exSignals[usedAuto.used[i]] = mealy.exSignals[i]
  80.             for j := 0; j < m; j++ {
  81.                 usedAuto.state[usedAuto.used[i]][j] = usedAuto.used[mealy.state[i][j]]
  82.             }
  83.         }
  84.     }
  85.     fmt.Print(index,"\n",m,"\n",0,"\n")
  86.     for i := 0; i < index; i++ {
  87.         for j := 0; j < m; j++ {
  88.             fmt.Print(usedAuto.state[i][j], " ")
  89.         }
  90.         fmt.Println()
  91.     }
  92.     for i := 0; i < index; i++ {
  93.         for j := 0; j < m; j++ {
  94.             fmt.Print(usedAuto.exSignals[i][j], " ")
  95.         }
  96.         fmt.Println()
  97.     }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement