You are on page 1of 4

1.

Primer iz knjige:**********************************************
Raspored dama na šahovskoj tabli tako da se ne napadaju

2.***********************************************************
RAD SA SKAKACIMA

Potrebno je posetiti svako polje šahovske table skakačem, po šahovskim pravilima, polazeći od zadatog polja sa
koordinatama (X, Y), pri čemu je na svako polje table dozvoljeno stati tačno jednom. Odrediti sva rešenja.

#include<stdio.h>
#define V 10
#define K 10
static int t[V][K]={0};
int prx[8]={-2,-2,2,2,-1,-1,1,1};
int pry[8]={-1,1,-1,1,-2,2,-2,2};

void ispisT(int t[][K],int n )


{int i,j;
printf("\n");
for (i=0;i<n;i++)
{for (j=0;j<n; j++)
printf("%3d ",t[i][j]);
printf("\n");}}

void ObilazakTable(int Tx, int Ty, int k)


{for (int i = 0; i < 8; i++)
{ int novoX = Tx + prx[i];
int novoY = Ty + pry[i];
if (novoX >= 0 && novoX < 8 && novoY >= 0 && novoY < 8 && t[novoX][novoY] == 0)
{t[novoX][novoY] = k;
if (k == 64) ispisT(t, 8);
else ObilazakTable(novoX, novoY, k + 1);
t[novoX][novoY] = 0;}
}
}
main()
{ int x,y;
printf("Unesi polozaj skakaca:");
scanf("%d%d", &x,&y);
t[x][y]=1;
ObilazakTable(x,y,2);
printf("kraj"); }

3.************************************************
LAVIRINT knjiga 180/13

4.***********************
BOJENJE MAPE
Data je geografska karta simetricnom matricom susedstva A(nxn) gde je a[i,j]=1 ako je država i susedna
državi j, a[i,j]=0 inace. Konstruisati algoritam kojom se boji karta sa 4 boje (1, 2, 3, 4) tako da su susedne
države obojene razlicitim bojama. . Naci sva resenja, a ukoliko rešenja nema dati odgovarajucu poruku.

#include <iostream>
#include <stdio.h>
using namespace std;

static int a[20][20], boja[20];


int n, b=0;
int SusedOd(int k, int c)
{// proverava da li je neki od suseda drzave k obojen bojom c
for (int j=1; j<=n; j++)
if (a[k][j]==1 && boja[j]==c) return 1;
return 0;
}

void pisi(int n)
{ b++;
for (int i=1; i<=n; i++)
cout << "Drzava " << i << " je obojena bojom " << boja[i]<< endl;
cout << "____________________________________" << endl;
}

void Boji(int k)
{
for (int c=1; c<=4; c++) // proba da drzavu K boji nekom od 4 boje
if (!SusedOd(k,c)) // ako susedi od K nisu obojeni bojom c
{boja[k]=c; // oboji drzavu K bojom c
if (k==n)pisi(n); // ako su sve drzave obojene, pisi resenje
else Boji(k+1); // ako nisu, nastavi sa bojenjem
boja[k]=0; // odustaje se od tekuceg izbora boje da bi se probalo sa drugom bojom
}
}
int main()
{cin >> n;
for (int i=2; i<=n; i++)
for (int j=1; j<i; j++)
{cout << "Da li se drzava " << i << " granici sa " << j<< ":";
cin >> a[i][j];
a[j][i]=a[i][j];
}
Boji(1);
if (!b) cout << "Nema resenja";
}

5.************************************************
// Neka je skup odreðen nizom Skup od N elemenata. Potrebno je kreirati sve njegove podskupove.
using namespace std;
int Skup[20],GenerisaniPS[20],n;
// GenerisaniPS je niz u kome se generi[e podskup
void pisiPodskup(int n)
{for(int i=0;i< n;i++)
printf("%3d",GenerisaniPS[i] );
printf("\n");
getchar();}

void FormirajPS(int i, int brElUP)


{if (i < n)
{GenerisaniPS[brElUP] = Skup[i];
FormirajPS(i + 1, brElUP + 1);
FormirajPS(i + 1, brElUP); }
else pisiPodskup(brElUP);
}

int main()
{ cin >>n;
for(int i=0;i<n;i++)cin >>Skup[i];
FormirajPS(0,0);

6.************************************************
//Zadatak: Popuniti zadatu sudoku zagonetku. Latinski kvadrati se rešavaju slično, samo lakše
//0 je oznaka da je nepopunjena æelija.

#include <stdio.h>
bool ImaRes=false;
bool moze(int S[9][9], int red, int kol, int broj)
{ int i,j, pi=red/3*3, pj=kol/3*3;
for (i=0;i<9;i++) if (S[i][kol]==broj) return 0;
for (i=0;i<9;i++) if (S[red][i]==broj) return 0;//Moze jedan for za ova dva
for (i=pi;i<pi+3;i++)
for (j=pj;j<pj+3;j++) if (S[i][j]==broj) return 0;
return 1;
}

void pisi(int S[9][9])


{for (int i = 0; i < 9; i++)
{ for (int j = 0; j < 9; j++)
printf("%2d", S[i][j]);
printf("\n"); } }

void PopuniSudoku(int S[9][9], int i, int j)


{ int SledeciR, SledecaK,PocetnaK;//ide od 0 0
if (i<9)
{ SledeciR=i+(j+1)/9; SledecaK=(j+1)%9;
if (S[i][j]!=0){ PopuniSudoku(S,SledeciR,SledecaK);}
else
for(int Br=1;Br<=9;Br++)
if (moze(S,i,j,Br))
{S[i][j]=Br;
PopuniSudoku(S,SledeciR,SledecaK);
S[i][j]=0;} }
else {pisi(S);ImaRes=true;}
}

You might also like