Cod sursa(job #400507)

Utilizator mytzuskyMihai Morcov mytzusky Data 21 februarie 2010 15:08:29
Problema Traseu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <iostream>
#include <stdio.h>

using namespace std;

int n,m,a[100][100],xi,yi,xf,yf,cx[3000],cy[3000],b[100][100];


const int dx[4]={-1,0,1,0};
const int dy[4]={0,1,0,-1};

struct drumul{
    int s; int t;
}e[10000];
void citire(){
    freopen ("traseu.in","r",stdin);

    scanf ("%d %d",&n,&m);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
             scanf ("%d",&a[i][j]);
    scanf("%d %d %d %d",&xi,&yi,&xf,&yf);
}

void bordare(int x[50][50]){
    for(int i=0;i<=m+1;i++)
         {
             x[0][i]=-1;
             x[n+1][i]=-1;
         }
    for(int i=0;i<=n+1;i++)
         {
             x[i][0]=-1;
             x[i][m+1]=-1;
         }
}

void lee(){
    int nr=1;
    b[xi][yi]=1;

    cx[0]=xi;
    cy[0]=yi;

    for(int i=0;i<nr;i++)
        {
            if ((b[cx[i]][cy[i]]==0)&&(a[cx[i]][cy[i]]!=0))
                  for(int k=0;k<4;k++)
                       {
                           b[cx[i]+dx[k]][cy[i]+dy[k]]=b[cx[i]][cy[i]]+1;
                           cx[nr]=cx[i]+dx[k];
                           cy[nr]=cx[i]+dy[k];
                           nr++;
                       }
        }
}
void drum()
{
    e[0].s=xi;e[0].t=yi;
    int p=0;
    int f[30000]={0};
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
            if (f[b[i][j]]==0)
                {
                    f[b[i][j]]=1;
                    p++;
                    e[p].s=i;e[p].t=j;
                }

    for (int i=1;i<=p;i++)
        cout<<e[i].s<<" "<<e[i].t<<endl;
}


int main()
{
    freopen ("traseu.out","w",stdout);

    citire();
    bordare(a);
    bordare(b);

    drum();


    for(int i=0;i<=n+1;i++)
         {
             for(int j=0;j<=m+1;j++)
                printf("%d ",b[i][j]);
             printf ("\n");
         }



    return 0;
}