Orar semigroup #2

Orar semigroup #2

11/3 - BackTracking in plan

Un labirint este codificat printr-o matrice L (n x m) ale cărui culoare sunt reprezentate prin elemente egale cu 0 situate in poziţii consecutive pe aceeaşi linie sau aceeaşi coloană. 
O persoană este paraşutată în labirint în poziţia (is, js) din interiorul labirintului. Se cere afişarea tuturor traseelor de ieşire din labirint care nu trec de mai multe ori prin acelaşi loc. 
Ieşirea din labirint se află pe marginea matricei.

#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},dy[]={0,1,0,-1};

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


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<4;k++)
{inou=i+dx[k];
jnou=j+dy[k];
if(inou>=1 && inou<=n && jnou>=1 && jnou<=m)
if(L[inou][jnou]==0 && sol[inou][jnou]==0)

{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 4
3 3
0 0 0 0
1 1 0 1
0 0 0 1
0 1 0 1
0 0 0 1

joi, 3 noiembrie 2011 by DlMuresan
Categories: , | 1 comment

One Comment

  1. Daaaaaaafuq is this ?!

Leave a Reply