Cod sursa(job #869925)

Utilizator alexsuciuAlex Suciu alexsuciu Data 2 februarie 2013 16:18:22
Problema Kdrum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int di[]={-1,0,1,0};
int dj[]={0,1,0,-1};
void citire(int &m,int &n,int &K,int &si,int &sj,int &fi, int &fj,int c[101][101])
{
    int i,j;
    ifstream f("kdrum.in");
    f>>m>>n>>K>>si>>sj>>fi>>fj;
    for(i=1;i<=m;i++)
    {
        for(j=1;j<=n;j++)
            f>>c[i][j];
    }
}
int ok(int i,int j,int m,int n)
{
    if(i>0&&i<=m&&j>0&&j<=n) return 1;
    return 0;
}
int main()
{
    int m,n,i,j,a[101][101],q[10000][2],nq,pq,si,sj,fi,fj,k,ni,nj,K;
    int c[101][101];
    citire(m,n,K,si,sj,fi,fj,c);
   for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    a[i][j]=-1;
    a[si][sj]=0;
    q[0][0]=si;
    q[0][1]=sj;
    pq=0;
    nq=1;
    while(pq<nq)
    {
        i=q[pq][0];
        j=q[pq][1];
        for(k=0;k<4;k++)
        {
            ni=i+di[k];
            nj=j+dj[k];
            if(ok(ni,nj,m,n)&&c[ni][nj]!=0&&(a[ni][nj]==-1||a[ni][nj]>a[i][j]+1))
            {
                a[ni][nj]=a[i][j]+1;
                q[nq][0]=ni;
                q[nq][1]=nj;
                nq++;
            }
        }
    pq++;}
ofstream g("okdrum.out");
g<<a[fi][fj]+1;
return 0;
}