Pagini recente » Cod sursa (job #174042) | Cod sursa (job #578508) | Cod sursa (job #2441669) | Cod sursa (job #1544689) | Cod sursa (job #2239048)
/// numarul de ecuatii, numarul de necunoscute, numarul de termeni
#include <fstream>
#define MAX_NECUTOSCUTE 100000
#define MAX_ECUATII 100000
#define MAX_DIMENSIUNE 100000
using namespace std;
ifstream fin ("2sat.in");
ofstream fout("2sat.out");
int A[MAX_ECUATII][MAX_DIMENSIUNE];
int x[MAX_NECUTOSCUTE];
int solutie, ecuatii, necunoscute, dimensiune;
void backtrack(int pas) {
if (solutie)
return;
if (pas > necunoscute) {
for (int i=1; i<=ecuatii; i++) {
int ok = 0;
for (int j=1; j<=dimensiune; j++) {
if (A[i][j] > 0 && x[ A[i][j] ] == 1) {
ok = 1;
break;
}
if (A[i][j] < 0 && x[ -A[i][j] ] == 0) {
ok = 1;
break;
}
}
if (ok == 0)
return;
}
solutie = 1;
///fout<<"DA\n";
for (int k=1;k<=necunoscute;k++)
fout<<x[k]<<" ";
fout<<"\n";
return;
} else {
for (int i=0; i<=1; i++) {
x[pas] = i;
backtrack(pas+1);
}
}
}
int main () {
fin>>necunoscute>>ecuatii;
dimensiune = 2;
for (int i=1; i<=ecuatii; i++) {
for (int j=1; j<=dimensiune; j++) {
fin>>A[i][j];
}
}
solutie = 0;
backtrack(1);
if (!solutie) {
fout<<"-1\n";
}
return 0;
}