Orar semigroup #2

Orar semigroup #2

11/10

Un turist pleaca in vacanta de iarna la munte. El descopera o suprafata dreptunghiulara de teren denivelat unde vrea sa schieze. Cunoscand cotele diferitelor portiuni din acest teren si stiind in ce portiunde se afla schiorul, sa se determine toate partiile posibile pe care acesta poate cobori, pana la iesirea din teren, La un moment dat, schiorul se poate deplasa in orice portiune de teren invecinata, avand o cota strict inferioara cotei terenului pe care se afla el in momentul respectiv. Se citesc dimensiunile terenului m si n (2<=m<=100, 2<=n<=100), cotele diferitelor portiuni ale terenului (date in ordine, pe linii) si pozitia schiorului.

#include<iomanip>
#include<iostream>
#include<fstream>
using namespace std;
int n,m,L[10][10],sol[10][10],nrsol=0,is,js;
int dx[]={-1,0,1,0,-1,1,1,-1},dy[]={0,1,0,-1,1,1,-1,-1};

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


void afisare()
{int i,j;
nrsol++;
cout<<"Solutia nr "<<nrsol<<endl;
for(i=1;i<=n;i++)
{for(j=1;j<=m;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<8;k++)
{inou=i+dx[k];
jnou=j+dy[k];
if(inou>=1 && inou<=n && jnou>=1 && jnou<=m)
if(sol[inou][jnou]==0 && L[inou][jnou]<L[i][j])
{sol[inou][jnou]=pas;
 if(inou==1 || inou==n || jnou==1 || jnou==m)
 afisare();
 traseu(inou,jnou,pas+1);
 sol[inou][jnou]=0;}
}
}

int main()
{citire();
sol[is][js]=1;
traseu(is,js,2);
cout<<nrsol;
}
Fisier
5 5
20 10 7 5 6
22 8 20 60 18
12 10 30 120 12
24 6 60 100 15
2 4 4 5 6
3 2
8. ANFINISHID Se citeste o matrice nXm cu elemente numere naturale si o pozitie io, jo din matrice in care se afla un robot care se poate deplasa paralel cu liniile si coloanele matricii pe pozitii alturate.
Afisati toate drumurile pe care poate parcurge robotul matricea trecand prin fiecare pozitie de atatea ori cat este valoarea pozitiei respective.
Drumurile vor fi afisate ca perechi de coordonate.
Exemplu:
pentru datele de intrare
6 7
0 0 0 0 0 0 0
0 0 1 1 1 0 0
0 1 2 0 2 1 0
0 0 1 0 1 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
3 2
se afiseaza
3,2 3,3 4,3 3,3 2,3 2,4 2,5 3,5 4,5 3,5 3,6
3,2 3,3 4,3 3,3 2,3 2,4 2,5 3,5 3,6 3,5 4,5

#include<iomanip>
#include<iostream>
#include<fstream>
using namespace std;
int n,m,L[10][10],px[20],py[20],nrsol=0,is,js,ii=1,ff[10][10];
int dx[]={1,0,-1,0},dy[]={0,1,0,-1};

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

void afisare(int n)
{int i;
for(i=0;i<n-1;i++)
    cout<<px[i]<<","<<py[i]<<"  ";
nrsol++;
cout<<endl;
}

int matrice(int L[10][10])
{int i,j,ok=0;
for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
        if(L[i][j]>0)
            ok=1;
return ok;
}

void traseu(int i, int j)
{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<=m)
    if(L[inou][jnou]>0)
        {L[inou][jnou]--;
         px[ii]=inou;
         py[ii]=jnou;
         ii++;
         if(matrice(L)==0)
            {afisare(ii);
             for(int jj=1;jj<=ii+1;jj++)
             {px[jj]=0;
              py[jj]=0;}
             ii=1;
             L[inou][jnou]++;
            }
         else traseu(inou,jnou);
         //L[inou][jnou]++;
        }
}
}

int main()
{citire();
px[0]=is;
py[0]=js;
traseu(is,js);
cout<<endl<<"Solutii totale "<<nrsol;
}
Fisier
6 7
0 0 0 0 0 0 0
0 0 1 1 1 0 0
0 1 2 0 2 1 0
0 0 1 0 1 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
3 2

joi, 10 noiembrie 2011 by DlMuresan
Categories: | Leave a comment

Leave a Reply