Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<queue>
  3. using namespace std;
  4. int n;
  5. struct node
  6. {
  7. int x,y,direc;
  8. node(int _x = 0,int _y = 0,int _direc = 0)
  9. {
  10. x = _x;
  11. y = _y;
  12. direc = _direc;
  13. }
  14. };
  15. bool check(int x,int y)
  16. {
  17. if(x >= 0 && y>= 0 && x < n && y < n)return 1;
  18. else return 0;
  19. }
  20. node t;
  21. int dx[] = {0,1,0,-1};
  22. int dy[] = {-1,0,1,0};
  23. int mem[1050][1050][5];
  24. int tab[1050][1050];
  25. queue<node>q;
  26. main()
  27. {
  28. int i,j;
  29. scanf("%d",&n);
  30. for(i=0;i<n;i++)
  31. {
  32. for(j=0;j<n;j++)
  33. {
  34. scanf("%d",&tab[i][j]);
  35. }
  36. }
  37. q.push({0,0,1});
  38. q.push({0,0,2});
  39. mem[0][0][1] = mem[0][0][2] = 0;
  40. // direc 0 --> u || 1 --> r || 2 --> d || 3 -->l
  41. while(!q.empty())
  42. {
  43. t = q.front();
  44. q.pop();
  45. if(t.x==n-1 && t.y==n-1)
  46. {
  47. printf("%d",mem[t.x][t.y][t.direc]);
  48. return 0;
  49. }
  50. if(check(t.x+dx[t.direc],t.y+dy[t.direc]) && tab[t.x+dx[t.direc]][t.y+dy[t.direc]] == 0 && !mem[t.x+dx[t.direc]][t.y+dy[t.direc]][t.direc])
  51. {
  52. q.push({t.x+dx[t.direc],t.y+dy[t.direc],t.direc});
  53. mem[t.x+dx[t.direc]][t.y+dy[t.direc]][t.direc] = mem[t.x][t.y][t.direc] +1;
  54. }
  55. else
  56. {
  57. for(i=0;i<4;i++)
  58. {
  59. if(check(t.x+dx[i],t.y+dy[i]) && tab[t.x+dx[i]][t.y+dy[i]] == 0 && !mem[t.x+dx[i]][t.y+dy[i]][i])
  60. {
  61. q.push({t.x+dx[i],t.y+dy[i],i});
  62. mem[t.x+dx[i]][t.y+dy[i]][i] = mem[t.x][t.y][t.direc] +1;
  63. }
  64. }
  65.  
  66. }
  67. }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement