Advertisement
Insyder01

Untitled

May 10th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.70 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=1e9;
  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.  
  33. void Dijkstra(){
  34.     dist[0][0]= grid[0][0];
  35.     priority_queue <pair <int, pii> > pq;
  36.     pq.push({0, {0,0}});
  37.     while(!pq.empty()){
  38.         pair <int, pii> F= pq.top();pq.pop();
  39.         int x=F.ss.ff,y=F.ss.ss,d=F.ff;
  40.         if(d>dist[x][y]) continue;
  41.         L(j,0,4){
  42.             if(valid(r,c,x+dx[j],y+dy[j]))
  43.                 if(dist[x+dx[j]][y+dy[j]] > dist[x][y]+grid[x+dx[j]][y+dy[j]]){
  44.                     dist[x+dx[j]][y+dy[j]]=dist[x][y]+grid[x+dx[j]][y+dy[j]];
  45.                     pq.push({dist[x+dx[j]][y+dy[j]],{x+dx[j],y+dy[j]}});
  46.                 }
  47.         }
  48.     }
  49. }
  50. int main(){
  51.     int t;in(t);
  52.     while(t--){
  53.         scanf("%d%d",&r,&c);
  54.         L(i,0,r)L(j,0,c)scanf("%d",&grid[i][j]),dist[i][j]=INF;
  55.         Dijkstra();
  56.         printf("%d\n",dist[r-1][c-1]);
  57.     }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement