Ladies_Man

Виз. Недетр. (vis_NDRec)

Jun 4th, 2014
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.14 KB | None | 0 0
  1. package main
  2. import "fmt"
  3.  
  4. type state struct {
  5.     in, out int
  6.     char    string
  7. }
  8. type elem struct {
  9.     num_of_hits int
  10.     chars       []string
  11. }
  12.  
  13. func main() {
  14.     var N, M, q_start int
  15.     fmt.Scanf("%d\n%d\n", &N, &M)
  16.     transit, final_state, matrix := make([]state, M), make([]int, N), make([][]elem, N)
  17.     for i := 0; i < N; i++ { matrix[i] = make([]elem, N); for j := 0; j < N; j++ { matrix[i][j].num_of_hits = 0 } }
  18.     for i := 0; i < M; i++ { fmt.Scanf("%d%d%s\n", &transit[i].in, &transit[i].out, &transit[i].char) }
  19.     for i := 0; i < N; i++ { fmt.Scanf("%d\n", &final_state[i]) }
  20.     fmt.Scanf("%d", &q_start)
  21.     fmt.Printf("digraph {\n\trankdir = LR\n\tdummy [label = \"\", shape = none]\n")
  22.     for i := 0; i < N; i++ { if 1 == final_state[i] { fmt.Printf("\t%d [shape = doublecircle]\n", i) } else { fmt.Printf("\t%d [shape = circle]\n", i) } }
  23.     fmt.Printf("\tdummy -> %d\n", q_start)
  24.     for k := 0; k < M; k++ {
  25.         for j := 0; j < N; j++ {
  26.             if j == transit[k].out {
  27.                 matrix[transit[k].in][j].num_of_hits++
  28.                 if transit[k].char == "lambda" { matrix[transit[k].in][j].chars = append(matrix[transit[k].in][j].chars, "λ") } else { matrix[transit[k].in][j].chars = append(matrix[transit[k].in][j].chars, transit[k].char) }
  29.             }
  30.         }
  31.     }
  32.     for i := 0; i < N; i++ {
  33.         for j := 0; j < N && 0 != matrix[i][j].num_of_hits; j++ {
  34.             if 0 != matrix[i][j].num_of_hits {
  35.                 fmt.Printf("\t%d -> %d [label = \"%s", i, j, matrix[i][j].chars[0])
  36.                 for k := 1; k < len(matrix[i][j].chars); k++ { fmt.Printf(", %s", matrix[i][j].chars[k]) }
  37.                 fmt.Printf("\"]\n")
  38.             }
  39.         }
  40.     }
  41. }
  42.  
  43. /*in:
  44. 5
  45. 8
  46. 0 1 a
  47. 0 2 a
  48. 1 3 b
  49. 3 1 lambda
  50. 3 3 a
  51. 2 4 c
  52. 4 4 a
  53. 4 4 b
  54. 0
  55. 0
  56. 0
  57. 1
  58. 1
  59. 0
  60. */
  61. /*out:
  62. digraph {
  63.         rankdir = LR
  64.         dummy [label = "", shape = none]
  65.         0 [shape = circle]
  66.         1 [shape = circle]
  67.         2 [shape = circle]
  68.         3 [shape = doublecircle]
  69.         4 [shape = doublecircle]
  70.         dummy -> 0
  71.         0 -> 1 [label = "a"]
  72.         0 -> 2 [label = "a"]
  73.         1 -> 3 [label = "b"]
  74.         2 -> 4 [label = "c"]
  75.         3 -> 3 [label = "a"]
  76.         3 -> 1 [label = "λ"]
  77.         4 -> 4 [label = "a, b"]
  78. }
  79. */
Advertisement
Add Comment
Please, Sign In to add comment