Advertisement
Guest User

BFS

a guest
Feb 23rd, 2020
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. vector <int> gr[20] ;
  5. bool vis[20];
  6. int fa[20];
  7. int st,en,rot;
  8. int angle[20][20],dis[20][20];
  9. string ans;
  10. void bfs(int u)
  11. {
  12. queue <int> q;
  13. q.push(u);
  14. fa[u]=-1;
  15. while(!q.empty())
  16. {
  17. u=q.front();
  18. q.pop();
  19. if(vis[u])continue;
  20. vis[u]=true;
  21. for(int i=0;i<gr[u].size();i++)
  22. {
  23. int v=gr[u][i];
  24. if(vis[v])continue;
  25. q.push(v);
  26. fa[v]=u;
  27. }
  28. }
  29. vector <int> trace;
  30. for(u=en;fa[u]!=-1;)
  31. {
  32. trace.push_back(u);
  33. u=fa[u];
  34. }
  35. trace.push_back(st);
  36. for(int i=trace.size()-1;i>0;i--)
  37. {
  38. if (rot == angle[trace[i]][trace[i-1]]){}
  39. else if(abs(rot-angle[trace[i]][trace[i-1]]) < abs(-rot+angle[trace[i]][trace[i-1]]) )
  40. {
  41. ans=ans+'R';
  42. if(rot-angle[trace[i]][trace[i-1]] <0)
  43. ans=ans+'-';
  44. else
  45. ans=ans+'+';
  46. ans=ans+char('0'+ abs(rot-angle[trace[i]][trace[i-1]])/100);
  47. ans=ans+char('0'+ (abs(rot-angle[trace[i]][trace[i-1]])/10)%10 );
  48. ans=ans+char('0'+ abs(rot-angle[trace[i]][trace[i-1]])%10);
  49. }
  50. else
  51. {
  52. ans=ans+'R';
  53. if(-rot+angle[trace[i]][trace[i-1]] <0)
  54. ans=ans+'-';
  55. else
  56. ans=ans+'+';
  57. ans=ans+char('0'+ abs(-rot+angle[trace[i]][trace[i-1]])/100);
  58. ans=ans+char('0'+ (abs(-rot+angle[trace[i]][trace[i-1]])/10)%10 );
  59. ans=ans+char('0'+ abs(-rot+angle[trace[i]][trace[i-1]])%10);
  60. }
  61. rot=angle[trace[i]][trace[i-1]];
  62. ans=ans+'F';
  63. ans=ans+char('0'+ dis[trace[i]][trace[i-1]]);
  64. }
  65. cout << ans << endl ;
  66. }
  67. int main()
  68. {
  69. int x,y;
  70.  
  71. int ang,d;
  72. int n , m ;
  73. cin >> n >> m ;
  74. for(int i=0;i<m;i++)
  75. {
  76. cin >> x >>y >> ang >> d ;
  77. gr[x].push_back(y);
  78. angle[x][y]=ang;
  79. dis[x][y]=d;
  80. }
  81. cout << "---------------------\n";
  82. cin >> st >> en >> rot;
  83. bfs(st);
  84.  
  85.  
  86. return 0;
  87. }
  88. /*
  89. 9 14
  90. 1 4 90 3
  91. 2 1 -45 2
  92. 3 1 -135 2
  93. 4 2 -135 2
  94. 4 3 -45 2
  95. 4 7 90 2
  96. 5 2 -90 2
  97. 6 3 -90 2
  98. 7 5 -135 2
  99. 7 6 -45 2
  100. 7 8 135 2
  101. 7 9 45 2
  102. 8 5 -90 3
  103. 9 6 -90 3
  104. 1 6 45
  105.  
  106.  
  107. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement