Cod sursa(job #434100)

Utilizator smitbZSVecerdea Radu smitbZS Data 5 aprilie 2010 00:38:36
Problema Kdrum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.07 kb
// lee - matrice n*m
#include <iostream>
#include <fstream.h>
using namespace std;

ifstream f("kdrum.in");
ofstream g("kdrum.out");

int n, m, i, c, j, l, lb[10][10], l1, c1, ct=0, k, v=1, kk;

void drum(int k, int l, int c){
    if(l+1<=n)
        if(lb[l+1][c]>k+1){
            lb[l+1][c]=k+1;
            drum(k+1, l+1, c);
        }
    if(l-1>0)
        if(lb[l-1][c]>k+1){
            lb[l-1][c]=k+1;
            drum(k+1, l-1, c);
        }
    if(c+1<=m)
        if(lb[l][c+1]>k+1){
            lb[l][c+1]=k+1;
            drum(k+1, l, c+1);
        }
    if(c-1>0)
        if(lb[l][c-1]>k+1){
            lb[l][c-1]=k+1;
            drum(k+1, l, c-1);
        }
}
void refac(int k, int i, int j){
    if(k<n*m && k>0)
        if(i<n && lb[i+1][j]==k-1){
            v*=lb[i+1][j];
            refac(k-1, i+1, j);
        }else if(i>1 && lb[i-1][j]==k-1){
            v*=lb[i-1][j];
            refac(k-1, i-1, j);
        }else if(j>1 && lb[i][j-1]==k-1){
            v*=lb[i][j-1];
            refac(k-1, i, j-1);
        }else if(j<n && lb[i][j+1]==k-1){
            v*=lb[i][j+1];
            refac(k-1, i, j+1);
        }
    ct++;
}
void refac1(int k, int i, int j){
    if(k<n*m && k>0)
        if(j>1 && lb[i][j-1]==k-1){
            v*=lb[i][j-1];
            refac1(k-1, i, j-1);
        }else if(j<n && lb[i][j+1]==k-1){
            v*=lb[i][j+1];
            refac1(k-1, i, j+1);
        }else if(i<n && lb[i+1][j]==k-1){
            v*=lb[i+1][j];
            refac1(k-1, i+1, j);
        }else if(i>1 && lb[i-1][j]==k-1){
            v*=lb[i-1][j];
            refac1(k-1, i-1, j);
        }
    ct++;
}
int main(){
    f >> n;
    f >> m;
    f >> kk;
    f >> l;
    f >> c;
    f >> l1;
    f >> c1;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            f >> lb[i][j];
    drum(0, l, c);
    refac(lb[l1][c1], l1, c1);
    if(v%kk==0)
        g << ct << endl;
    else{
        ct=0;
        refac1(lb[l1][c1], l1, c1);
        g << ct << endl;
    }
    f.close();
    g.close();
    return 0;
}