Advertisement
Ladies_Man

Canon Mealy (Кан.нумерация мили)

Jun 9th, 2014
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.64 KB | None | 0 0
  1. package main
  2. import "fmt"
  3. import "github.com/skorobogatov/input"
  4.  
  5. var n, m, q_start, time int
  6. var h1 []int
  7. var h2 []int
  8.  
  9. func DFS(q int, delta [][]int) { if 0 > h1[q] { h1[q], time, h2 = time, time+1, append(h2, q); for i := 0; i < len(delta[q]); i++ { DFS(delta[q][i], delta) } } }
  10.  
  11. func Init_canon_auto(delta [][]int, phi [][]string) (delta1 [][]int, phi1 [][]string) {
  12.     delta1, phi1 = make([][]int, time), make([][]string, time)
  13.     for i := 0; i < time; i++ { delta1[i], phi1[i] = make([]int, m), make([]string, m) }
  14.     for i := 0; i < time; i++ {
  15.         x, curr1, curr2 := h2[i], -1, "x"
  16.         for j := 0; j < len(delta[x]); j++ {
  17.             curr1 = delta[x][j]
  18.             delta1[i][j] = h1[curr1]
  19.         }
  20.         for j := 0; j < len(phi[x]); j++ {
  21.             curr2 = phi[x][j]
  22.             phi1[i][j] = curr2
  23.         }
  24.     }
  25.     return
  26. }
  27.  
  28. func Visualization(delta1 [][]int, phi1 [][]string) {
  29.     fmt.Printf("%d\n%d\n0\n", time, m)
  30.     for i := 0; i < time; i++ { for j := 0; j < m; j++ { fmt.Printf("%d ", delta1[i][j]) }; fmt.Printf("\n") }
  31.     for i := 0; i < time; i++ { for j := 0; j < m; j++ { fmt.Printf("%s ", phi1[i][j]) }; fmt.Printf("\n") }
  32. }
  33.  
  34. func main() {
  35.     input.Scanf("%d%d%d", &n, &m, &q_start)
  36.     h1, h2, time = make([]int, n), make([]int, 0, n), 0
  37.     delta, phi := make([][]int, n), make([][]string, n)
  38.     for i := 0; i < n; i++ {
  39.         delta[i], h1[i] = make([]int, m), -1
  40.         for j := 0; j < m; j++ { input.Scanf("%d", &delta[i][j]) }
  41.     }
  42.     for i := 0; i < n; i++ {
  43.         phi[i] = make([]string, m)
  44.         for j := 0; j < m; j++ { input.Scanf("%s", &phi[i][j]) }
  45.     }
  46.  
  47.     DFS(q_start, delta)
  48.  
  49.     m = len(delta[q_start])
  50.     new_delta, new_phi := Init_canon_auto(delta, phi)
  51.  
  52.     Visualization(new_delta, new_phi)
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement