Pagini recente » Cod sursa (job #589960) | Cod sursa (job #1439498) | Cod sursa (job #8601) | Cod sursa (job #1799958) | Cod sursa (job #214387)
Cod sursa(job #214387)
// Gropi.cpp : Defines the entry point for the console application.
//
//#include "stdafx.h"
#include "fstream"
#include "iostream"
using namespace std;
int main(void)
{
fstream in, out;
in.open("gropi.in", ios_base::in);
if(!in.is_open())
{
cout << "Eroare la deschiderea fisierului de intrare!";
return 1;
}
out.open("gropi.out", ios_base::out);
if(!out.is_open())
{
cout << "Eroare la deschiderea fisierului de iesire!";
return 1;
}
int N, C, M, i;
bool **oras; // harta oras
int x, y;
in >> C >> N; // citire date de intrare
oras = new bool*[2];
oras[0] = new bool[C];
oras[1] = new bool[C];
for(i = 0; i < N; i++)
{
in >> x >> y; // citire coordonate gropi
//cout << x << " " << y << endl;
oras[x - 1][y - 1] = true;
}
in >> M; // nr. teste
int x1, y1, x2, y2;
int nrPasi, directie;
for(i = 0; i < M; i++)
{
in >> x1 >> y1 >> x2 >> y2; // citire coordonate initiale si finale
x1--; x2--;
y1--; y2--;
//cout << x1 << " " << y1 << " " << x2 << " " << y2 << endl;
nrPasi = 0;
while(x1 != x2 || y1 != y2)
{
//cout << x1 << " " << y1 << endl;
if((y2 - y1) > 0) // afla directia de parcurgere
directie = 1;
else
if((y2 - y1) == 0)
directie = 0;
else
directie = -1;
//cout << "Directie: " << directie << endl;
if(oras[x1][y1 + directie] == true) // daca avem groap in fata schimbam linia
x1 = (x1 + 1) % 2;
else
{
if(y1 == y2) // daca nu avem groapa dar suntem pe coloana finala dar nu si pe linia finala, schimbam linia
x1 = (x1 + 1) % 2;
y1 += directie; // parcurgere o unitate inspre pozitia finala
}
nrPasi++;
}
//cout << "Nr. pasi: " << nrPasi + 1 << endl;
out << nrPasi + 1 << endl;
}
in.close();
out.close();
//system("PAUSE");
return 0;
}