fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. template <typename T>
  4. class Graph{
  5. map<T,list<T>> l;
  6. public:
  7. void addEdge(int x, int y){
  8. l[x].push_back(y);
  9. l[y].push_back(x);
  10. }
  11. void bfs(T src, T destination){
  12. map<T,T> parent;
  13. map<T,int> distance;
  14. queue<T> q;
  15. //all other nodes will have INT_MAX value
  16. for(auto node_pair:l){
  17. T node= node_pair.first;
  18. distance[node]=INT_MAX;
  19. }
  20. q.push(src);
  21. distance[src]=0;
  22. parent[src]=src;
  23. while(!q.empty()){
  24. T node=q.front();
  25. q.pop();
  26. for(int neighbour:l[node]){
  27. if(distance[neighbour]==INT_MAX){
  28. q.push(neighbour);
  29. //mark that neighbour as visited
  30. distance[neighbour]=distance[node]+1;
  31. parent[neighbour]=node;
  32. }
  33. }
  34. }
  35. //print distance to every node
  36. for(auto node_pair:l){
  37. T node=node_pair.first;
  38. int d=distance[node];
  39. cout<<"Node "<<node<<" distance from src is "<<d<<endl;
  40. }
  41.  
  42. //print distance to every node
  43. for(auto node_pair:l){
  44. cout<<node_pair.first<<" and distance "<<distance[node_pair.first]<<endl;
  45. }
  46. T temp=destination;
  47. while(temp!=src){
  48. cout<<temp<<"<--";
  49. temp=parent[temp];
  50. }
  51. cout<<src<<endl;
  52.  
  53. cout<< distance[destination];
  54. }
  55. };
  56. int main()
  57. {
  58. int board[50]={0};
  59. //snakes // ladders
  60. board[2]=13;
  61. board[5]=2;
  62. board[9]=18;
  63. board[18]=11;
  64. board[17]=-13;
  65. board[20]=-14;
  66. board[24]=-8;
  67. board[25]=10;
  68. board[32]=-2;
  69. board[34]=-22;
  70. //Add edges to graph
  71. Graph<int> g;
  72. for(int i=0;i<=37;i++){
  73. for(int dice=1;dice<=6;dice++){
  74. int j=i+dice;
  75. j+=board[j];
  76. if(j<=36){
  77. g.addEdge(i,j);
  78. }
  79. }
  80. }
  81. g.addEdge(36,36);
  82. g.bfs(0,36);
  83.  
  84. return 0;
  85. }
Success #stdin #stdout 0s 4468KB
stdin
Standard input is empty
stdout
Node 0 distance from src is 0
Node 1 distance from src is 1
Node 2 distance from src is 2
Node 3 distance from src is 1
Node 4 distance from src is 1
Node 5 distance from src is 2
Node 6 distance from src is 1
Node 7 distance from src is 1
Node 8 distance from src is 2
Node 9 distance from src is 2
Node 10 distance from src is 2
Node 11 distance from src is 2
Node 12 distance from src is 2
Node 13 distance from src is 2
Node 14 distance from src is 2
Node 15 distance from src is 1
Node 16 distance from src is 2
Node 17 distance from src is 2
Node 18 distance from src is 2
Node 19 distance from src is 2
Node 20 distance from src is 3
Node 21 distance from src is 2
Node 22 distance from src is 3
Node 23 distance from src is 3
Node 24 distance from src is 3
Node 25 distance from src is 3
Node 26 distance from src is 3
Node 27 distance from src is 2
Node 28 distance from src is 3
Node 29 distance from src is 2
Node 30 distance from src is 3
Node 31 distance from src is 3
Node 32 distance from src is 3
Node 33 distance from src is 3
Node 34 distance from src is 4
Node 35 distance from src is 3
Node 36 distance from src is 4
0 and distance 0
1 and distance 1
2 and distance 2
3 and distance 1
4 and distance 1
5 and distance 2
6 and distance 1
7 and distance 1
8 and distance 2
9 and distance 2
10 and distance 2
11 and distance 2
12 and distance 2
13 and distance 2
14 and distance 2
15 and distance 1
16 and distance 2
17 and distance 2
18 and distance 2
19 and distance 2
20 and distance 3
21 and distance 2
22 and distance 3
23 and distance 3
24 and distance 3
25 and distance 3
26 and distance 3
27 and distance 2
28 and distance 3
29 and distance 2
30 and distance 3
31 and distance 3
32 and distance 3
33 and distance 3
34 and distance 4
35 and distance 3
36 and distance 4
36<--30<--12<--15<--0
4