Advertisement
Guest User

Untitled

a guest
May 20th, 2018
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.83 KB | None | 0 0
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type Graph struct {
  6. states int
  7. InputAlph string
  8. mark string
  9. newStates int
  10. newInputAlph string
  11. }
  12.  
  13. type Vert struct {
  14.         s    int
  15.     mark string
  16. }
  17.  
  18. func main() {
  19.  
  20.     var n, m, q int
  21.     //ind := 0
  22.     fmt.Scan(&n)
  23.     fmt.Scan(&m)
  24.     fmt.Scan(&q)
  25.  
  26.     arr1 := make([][] Graph, n, n)
  27.  
  28.     for i := 0; i < n; i++ {
  29.         arr1[i] = make([] Graph, m)
  30.     }
  31.  
  32.     for i := 0; i < n; i++ {
  33.         for j := 0; j < m; j++ {
  34.             fmt.Scan(&arr1[i][j].states)
  35.             //arr1[i][j].mark = "white"
  36.         }
  37.     }
  38.  
  39.     for i := 0; i < n; i++ {
  40.         for j := 0; j < m; j++ {
  41.             fmt.Scan(&arr1[i][j].InputAlph)
  42.         }
  43.     }
  44.     DFS(arr1, n, m, q)
  45. }
  46.  
  47. func print(arr1[][] Graph, n, m int) {
  48.  
  49.     fmt.Println(n)
  50.     fmt.Println(m)
  51.     fmt.Println(0)
  52.  
  53.     for i := 0; i < n; i++ {
  54.         for j := 0; j < m; j++ {
  55.             fmt.Print(arr1[i][j].newStates)
  56.             fmt.Print(" ")
  57.         }
  58.         fmt.Println()
  59.     }
  60.  
  61.     for i := 0; i < n; i++ {
  62.         for j := 0; j < m; j++ {
  63.             fmt.Print(arr1[i][j].newInputAlph + " ")
  64.         }
  65.         fmt.Println()
  66.     }
  67. }
  68.  
  69. func NewMatrix(arr1[][] Graph, arr[] Vert, newN, n, m, q int)  {
  70.     for i := 0; i < n; i++ {
  71.         for j := 0; j < m; j++ {
  72.             arr1[arr[i].s][j].newStates = arr[arr1[i][j].states].s
  73.             arr1[arr[i].s][j].newInputAlph = arr1[i][j].InputAlph
  74.         }
  75.     }
  76.     print(arr1, newN, m)
  77.  
  78. }
  79.  
  80. func DFS(arr1[][] Graph, n, m, q int) {
  81.     stack := newStack(n)
  82.     sizeStack := 0
  83.     arr := make([] Vert, n)
  84.     count := 0
  85.     stack[sizeStack] = q
  86.     sizeStack++
  87.     for sizeStack > 0 {
  88.         sizeStack--
  89.         v := stack[sizeStack]
  90.         if arr[v].mark != "black" {
  91.             arr[v].mark = "black"
  92.             arr[v].s = count
  93.             count++
  94.         }
  95.         for i := m - 1; i > -1; i-- {
  96.             u := arr1[v][i].states
  97.             if arr[u].mark != "black" {
  98.                 stack[sizeStack] = u
  99.                 sizeStack++
  100.             }
  101.         }
  102.     }
  103.     NewMatrix(arr1, arr, count, n, m, q)
  104. }
  105.  
  106. func newStack(n int) []int  {
  107.     stack := make([]int, n*n)
  108.     return stack
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement