Pagini recente » Cod sursa (job #1121026) | Cod sursa (job #768494) | Cod sursa (job #109459) | Cod sursa (job #715190) | Cod sursa (job #917276)
Cod sursa(job #917276)
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstring>
using namespace std;
ifstream fin("cobai.in");
ofstream fout("cobai.out");
short int n, m, a[55][55], linie, coloana;
char dir[1011];
double fav, posibil;
short int l[400000], c[400000];
void Citire(){
fin>>n>>m;
fin.get();
char x;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
fin.get(x);
if(x == '+') a[i][j] = -1;
else if(x == '*') a[i][j] = -1, linie = i, coloana = j;
else posibil++;
}
fin.get();
}
fin.getline(dir, 1005);
}
void Bordare(){
for(int i=0; i<=n+1; i++)
a[i][0] = a[i][m+1] = -1;
for(int j=0; j<=m+1; j++)
a[0][j] = a[n+1][j] = -1;
}
void Afisare(){
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++)
fout<<setw(2)<<a[i][j]<<" ";
fout<<endl;
}
}
void Parcurgere(){
int st=1, dr=1, k1, k2, poz = 0, prim = 1;
l[dr] = linie, c[dr] = coloana;
while(poz < strlen(dir)){
st = prim;
if(dir[poz] == 'N') k1 = -1, k2 = 0;
else if(dir[poz] == 'S') k1 = 1, k2 = 0;
else if(dir[poz] == 'E') k1 = 0, k2 = 1;
else if(dir[poz] == 'V') k1 = 0, k2 = -1;
int x=1;
while(st<=dr){
int i = l[st], j = c[st];
int ii = i + k1, jj = j + k2;
if(poz+1 > a[ii][jj] && a[ii][jj] != -1){
dr++;
if(x) prim = dr, x = 0;
l[dr] = ii, c[dr] = jj;
a[ii][jj] = poz+1;
if(poz == strlen(dir)-1) fav++;
}
st++;
}
poz++;
}
}
int main()
{
Citire();
Bordare();
Parcurgere();
double rez = (fav*100)/posibil;
fout<<setprecision(6)<<fixed<<rez;
//Afisare();
return 0;
}