Advertisement
Guest User

Untitled

a guest
Sep 5th, 2015
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.84 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<limits.h>
  3. int Visited[30][30];
  4. char MATRIX[30][30];
  5. int Queue[20000];
  6. int dx[] = {-1,1,0,0};
  7. int dy[] = {0,0,-1,1};
  8. int main()
  9. {
  10. int WIDTH,HEIGHT;
  11. char Dum[30];
  12. while(scanf("%d %d",&WIDTH,&HEIGHT))
  13. {
  14. if(WIDTH == 0 && HEIGHT ==0)
  15. break;
  16.  
  17. int rpos=0,wpos=0;
  18. int DX,DY;
  19. int i,j;
  20. for(i=1;i<=HEIGHT;i++)
  21. {
  22. for(j=1;j<=WIDTH;j++)
  23. Visited[i][j] = INT_MAX;
  24. }
  25.  
  26. for(i=1;i<=HEIGHT;i++)
  27. {
  28. scanf("%s",Dum);
  29. for(j=1;j<=WIDTH;j++)
  30. {
  31.  
  32. if(Dum[j-1] == 'X')
  33. {
  34. Visited[i][j] = -1;
  35. MATRIX[i][j] = -1;
  36. }
  37. else if(Dum[j-1] == 'S')
  38. {
  39. Queue[wpos] = 1024*i + j;
  40. wpos++;
  41. MATRIX[i][j] = 0;
  42. Visited[i][j] = 0;
  43. }
  44. else if(Dum[j-1] == 'D')
  45. {
  46. DX = i, DY = j;
  47. MATRIX[i][j] = 0;
  48. Visited[i][j] = INT_MAX;
  49. }
  50. else
  51. MATRIX[i][j] = Dum[j-1] - '0';
  52. }
  53. }
  54.  
  55.  
  56. while(rpos<=wpos)
  57. {
  58. int X = Queue[rpos]/1024;
  59. int Y = Queue[rpos]%1024;
  60.  
  61. rpos++;
  62. if(X == DX && Y == DY)
  63. continue;
  64. //printf("%d %dn",X,Y);
  65. int k;
  66. for(k=0;k<4;k++)
  67. {
  68. int KX = X + dx[k];
  69. int KY = Y + dy[k];
  70. //printf("+%d %d+n",KX,KY);
  71. if(KX>=1 && KX<=HEIGHT && KY>=1 && KY <= WIDTH && Visited[KX][KY] != -1 && Visited[KX][KY] > Visited[X][Y] + MATRIX[KX][KY])
  72. {
  73. //printf("-%d %d-n",KX,KY);
  74. Visited[KX][KY] = Visited[X][Y] + MATRIX[KX][KY];
  75. Queue[wpos] = 1024*KX + KY;
  76. wpos++;
  77. }
  78. }
  79. }
  80.  
  81. printf("%dn",Visited[DX][DY]);
  82. }
  83. return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement