Cod sursa(job #1502084)

Utilizator tester_100Alin Barosanu tester_100 Data 14 octombrie 2015 09:44:24
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.58 kb
#include <bits/stdc++.h>
#define nmax 505
#define INF 9999

using namespace std;
int N,M,xi,yi,xf,yf,dp[nmax][nmax][8];
bool a[nmax][nmax];
const int dx[]={-1, -1, 0, 1, 1, 1, 0, -1}
const int dy[]={0, 1, 1, 1, 0, -1, -1, -1};

struct el{
 int x,y,dir;
   el(){};
   el(const int x1,const int y1,const int dir1){
      x = x1; y = y1; dir = dir1;
    }
 bool ok(int N,int M){
  if(x < 1 || y < 1 || x > N || y > M || !a[x][y]) return false;
  return true;
 }
};
queue<el>q[2];
inline void Solve(){
 int i;
 el cur,urm;
 memset(dp,INF,sizeof(dp));
    for(i = 0; i < 8; ++i){
       dp[xi][yi][i] = 0;
       q[0].push(el(xi+dx[i],yi+dy[i],i));
    }
    for(i = 0;!q[i].empty();i^=1){

        while(!q[i].empty()){
           cur = q[i].front();
           q[i].pop();
           urm = el(cur.x+dx[cur.dir],cur.y+dy[cur.dir],cur.dir);
           if(urm.ok() && dp[urm.x][urm.y][urm.dir] > dp[cur.x][cur.y][cur.dir]){
              dp[dp[urm.x][urm.y][urm.dir]] = dp[cur.x][cur.y][cur.dir];
              q[i].push(urm);
           }
          urm = el(cur.x,cur.y,(cur.dir+1)%8);
          if(urm.ok() && dp[urm.x][urm.y][urm.dir] > dp[cur.x][cur.y][cur.dir]+1){
              dp[dp[urm.x][urm.y][urm.dir]] = dp[cur.x][cur.y][cur.dir]+1;
              q[i].push(urm);
           }

        }

    }
}
int main(){
    int i,j;
    freopen("car.in","r",stdin);
    freopen("car.out","w",stdout);
    scanf("%d %d\n%d%d%d%d",&N,&M,&xi,&yi,&xf,&yf);
    for(i = 1; i <= N; ++i)
        for(j = 1; j <= M; ++j)
         scanf("%d",&a[i][j]);

    return 0;
}