Orar semigroup #2

Orar semigroup #2

Tiest 11/11/11 - Broasca

Se oferă un lac de nxn "bălţi" care posedă sau nu obiecte plutitoare care pot susţine o broască de masă m. Broasca este paraşutată pe un astfel de obiect plutitor căruia îi vom atribui în continuare denumirea de "nufăr". Se citeşte dintr-un fişier cu denumire fortuită n, poziţia iniţială a amfibianului, un număr întreg m şi m perechi de coordonate pe care se găsesc nuferi. Să se jenereze într-o ordine fortuită toate traseele pe care le poate parcurge amfibianul pentru a ajunge la malul lacului. Pentru olimpici (se cere doar la faza naţională): Rezolvaţi aceeaşi problemă pentru masa broaştei M=m derivat de două ori în raport cu sinusul unghiului format de razele soarelui cu suprafaţa nufărului cel mai apropiat de centrul lacului.

#include<iostream>  // Rezolvare pentru non-olimpici
#include<fstream>
#include<iomanip>
using namespace std;

int L[10][10],sol[10][10],n,m,nrsol,is,js;
int dx[]={-1,-1,1,1},dy[]={-1,1,1,-1};

void citire()
{int a,b,i;
ifstream f("broasca");
f>>n>>is>>js>>m;
for(i=1;i<=m;i++)
{f>>a>>b;L[a][b]=1;}
}

void afisare()
{int i,j;
nrsol++;
cout<<"Solutia nr "<<nrsol<<endl;
for(i=1;i<=n;i++)
{    for(j=1;j<=n;j++)
        cout<<setw(3)<<sol[i][j];
cout<<endl;}
cout<<endl;
}

void traseu(int i, int j, int pas)
{int inou,jnou,k;
for(k=0;k<4;k++)
{inou=i+dx[k];
jnou=j+dy[k];
if(inou>=1 && inou<=n && jnou>=1 && jnou<=n)
    if(sol[inou][jnou]==0 && L[inou][jnou]==1)
    {sol[inou][jnou]=pas;
    if(inou==1 || inou==n || jnou==1 || jnou==n)
        afisare();
    traseu(inou,jnou,pas+1);
    sol[inou][jnou]=0;
    }
}
}

int main()
{citire();
sol[is][js]=1;
traseu(is,js,2);
cout<<nrsol<<" Solutii";
}
Fişier
7
4 3
10
1 2
1 4
2 3
2 5
3 4
3 5
4 1
5 2
6 1
7 2

duminică, 13 noiembrie 2011 by DlMuresan
Categories: | Leave a comment

Leave a Reply