fork download
  1. # 面倒だから 点32 を 点0 に変更
  2.  
  3. require 'matrix'
  4. require 'mathn'
  5.  
  6. N = 32 # 点の数
  7. A, B = 5, 0 # 電位が与えられた点
  8. VA, VB = 5, 0 # 電位
  9.  
  10. reg = DATA.map {|s| s.split(' ').map(&:to_i)}
  11.  
  12. mat = (1..N).map {[0] * N}
  13. reg.each do |i, j|
  14. mat[i][i] += 1
  15. mat[i][j] -= 1
  16. mat[j][j] += 1
  17. mat[j][i] -= 1
  18. end
  19. mat[A], mat[B] = [0] * N, [0] * N
  20. mat[A][A] = mat[B][B] = 1
  21.  
  22. v = [0] * N
  23. v[A], v[B] = VA, VB
  24.  
  25. sol = Matrix.rows(mat).inv * Vector.elements(v)
  26. N.times {|i| puts "#{i} #{sol[i].to_f}"}
  27.  
  28. __END__
  29. 1 2
  30. 1 6
  31. 2 3
  32. 2 7
  33. 3 4
  34. 3 8
  35. 4 5
  36. 4 9
  37. 5 10
  38. 6 7
  39. 6 11
  40. 7 8
  41. 7 12
  42. 8 9
  43. 8 13
  44. 9 10
  45. 9 14
  46. 10 15
  47. 11 12
  48. 11 16
  49. 12 13
  50. 12 17
  51. 13 14
  52. 13 22
  53. 14 15
  54. 16 17
  55. 16 18
  56. 17 19
  57. 18 19
  58. 18 23
  59. 19 20
  60. 19 24
  61. 20 21
  62. 20 25
  63. 21 22
  64. 21 26
  65. 22 27
  66. 23 24
  67. 23 28
  68. 24 25
  69. 24 29
  70. 25 26
  71. 25 30
  72. 26 27
  73. 26 31
  74. 27 0
  75. 28 29
  76. 29 30
  77. 30 31
  78. 31 0
Success #stdin #stdout 0.23s 8028KB
stdin
Standard input is empty
stdout
0 0.0
1 2.998653811893846
2 3.1502841327666737
3 3.4855220804636633
4 4.071365945143414
5 5.0
6 2.847023491021018
7 2.9666765059425124
8 3.2349161634809014
9 3.72857575496658
10 4.177528736862527
11 2.575740155226696
12 2.634482236501456
13 2.7588903125508497
14 3.4304921743794776
15 3.8040104556210026
16 2.2457147381576146
17 2.236621972285765
18 1.9247820869603824
19 1.8296689421982255
20 1.5649222421361924
21 1.4848812311762862
22 1.7356706758415636
23 1.6989625805253072
24 1.5923494674105616
25 1.3802165530340655
26 1.1540507755511025
27 0.9632404837975553
28 1.5797561872049777
29 1.4605497938846483
30 1.2095437270384055
31 0.7878648341965027