Insyder01

Untitled

May 10th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define L(i, m, n) for(int i(m);i < n;i++)
  3. #define pb push_back
  4. #define D(X) cout<<"  "<<#X": "<<X<<endl;
  5. #define in(x) cin >> x
  6. #define SZ(X) int(X.size())
  7. #define clr(A, V) L(i, 0, 111) A[i]=V
  8. #define ff first
  9. #define ss second
  10. #define RF(X) freopen(X, "r", stdin)
  11. #define WF(X) freopen(X, "w", stdout)
  12. using namespace std;
  13. typedef long long ll;
  14. typedef pair<ll,ll> pll;
  15. typedef vector<int> vi;
  16. typedef vector<vi> vii;
  17. typedef pair<int,int> pii;
  18. typedef vector<pii> vpii;
  19. typedef pair<int, string> pis;
  20. typedef vector<string> vs;
  21. typedef pair<pair<int, int>, pair<int, int > > piiii;
  22.  
  23. const int INF=2e9;
  24. int dist[1000][1000], grid[1000][1000]; /**Don't forget to check nodes number and memset each test**/
  25. int r, c;
  26. int dx[]={1,-1,0,0};
  27. int dy[]={0,0,1,-1};
  28. bool valid(int r, int c, int i, int j){
  29.     if(i < 0 || i >= r || j < 0 || j >=c) return 0;
  30.     return 1;
  31. }
  32. void init(){
  33.     L(i,0,1000)L(j,0,1000) dist[i][j]=INF, grid[i][j]=0;
  34. }
  35. void Dijkstra(){
  36.     dist[0][0]= grid[0][0];
  37.     priority_queue <pair <int, pii> > pq;
  38.     pq.push({0, {0,0}});
  39.     while(!pq.empty()){
  40.         pair <int, pii> F= pq.top();pq.pop();
  41.         int x=F.ss.ff,y=F.ss.ss,d=F.ff;
  42.         if(d>dist[x][y]) continue;
  43.         L(j,0,4){
  44.             if(valid(r,c,x+dx[j],y+dy[j]))
  45.                 if(dist[x+dx[j]][y+dy[j]] > dist[x][y]+grid[x+dx[j]][y+dy[j]]){
  46.                     dist[x+dx[j]][y+dy[j]]=dist[x][y]+grid[x+dx[j]][y+dy[j]];
  47.                     pq.push({dist[x+dx[j]][y+dy[j]],{x+dx[j],y+dy[j]}});
  48.                 }
  49.         }
  50.     }
  51. }
  52. int main(){
  53.     int t;in(t);
  54.     while(t--){
  55.         init();
  56.         scanf("%d%d",&r,&c);
  57.         L(i,0,r)L(j,0,c)scanf("%d",&grid[i][j]);
  58.         Dijkstra();
  59.         printf("%d\n",dist[r-1][c-1]);
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment