Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define L(i, m, n) for(int i(m);i < n;i++)
- #define pb push_back
- #define D(X) cout<<" "<<#X": "<<X<<endl;
- #define in(x) cin >> x
- #define SZ(X) int(X.size())
- #define clr(A, V) L(i, 0, 111) A[i]=V
- #define ff first
- #define ss second
- #define RF(X) freopen(X, "r", stdin)
- #define WF(X) freopen(X, "w", stdout)
- using namespace std;
- typedef long long ll;
- typedef pair<ll,ll> pll;
- typedef vector<int> vi;
- typedef vector<vi> vii;
- typedef pair<int,int> pii;
- typedef vector<pii> vpii;
- typedef pair<int, string> pis;
- typedef vector<string> vs;
- typedef pair<pair<int, int>, pair<int, int > > piiii;
- const int INF=1e9;
- int dist[1000][1000], grid[1000][1000]; /**Don't forget to check nodes number and memset each test**/
- int r, c;
- int dx[]={1,-1,0,0};
- int dy[]={0,0,1,-1};
- bool valid(int r, int c, int i, int j){
- if(i < 0 || i >= r || j < 0 || j >=c) return 0;
- return 1;
- }
- void Dijkstra(){
- dist[0][0]= grid[0][0];
- priority_queue <pair <int, pii> > pq;
- pq.push({0, {0,0}});
- while(!pq.empty()){
- pair <int, pii> F= pq.top();pq.pop();
- int x=F.ss.ff,y=F.ss.ss,d=F.ff;
- if(d>dist[x][y]) continue;
- L(j,0,4){
- if(valid(r,c,x+dx[j],y+dy[j]))
- if(dist[x+dx[j]][y+dy[j]] > dist[x][y]+grid[x+dx[j]][y+dy[j]]){
- dist[x+dx[j]][y+dy[j]]=dist[x][y]+grid[x+dx[j]][y+dy[j]];
- pq.push({dist[x+dx[j]][y+dy[j]],{x+dx[j],y+dy[j]}});
- }
- }
- }
- }
- int main(){
- int t;in(t);
- while(t--){
- scanf("%d%d",&r,&c);
- L(i,0,r)L(j,0,c)scanf("%d",&grid[i][j]),dist[i][j]=INF;
- Dijkstra();
- printf("%d\n",dist[r-1][c-1]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement