Presentation is loading. Please wait.

Presentation is loading. Please wait.

N-ლაზიერის ამოცანა ვთქვათ, მოცემულია საჭადრაკო დაფა და 8 ლაზიერი

Similar presentations


Presentation on theme: "N-ლაზიერის ამოცანა ვთქვათ, მოცემულია საჭადრაკო დაფა და 8 ლაზიერი"— Presentation transcript:

1 N-ლაზიერის ამოცანა ვთქვათ, მოცემულია საჭადრაკო დაფა და 8 ლაზიერი
ვთქვათ, მოცემულია საჭადრაკო დაფა და 8 ლაზიერი შესაძლებელია თუ არა რვავე ლაზიერის ისე განლაგება დაფაზე, რომ არცერთი მათგანი არ ემუქრებოდეს სხვას?

2 N-ლაზიერის ამოცანა ორი ლაზიერი ერთმანეთს ემუქრება, თუ ისინი მდებარეობენ ერთ და იმავე ვერტიკალზე, ჰორიზონტალზე ან დიაგონალზე

3 N-ლაზიერის ამოცანა ზოგადად, ეს ამოცანა შეიძლება დაისვას N x N ზომის დაფისათვის და შესაბამისად, N ლაზიერისათვის N ლაზიერი N სვეტი N სტრიქონი

4 N-ლაზიერის ამოცანა ამოცანის ამოსახსნელად საჭიროა გადარჩევა უკან დაბრუნებით. ცხადია, რომ ამონახსნში ყოველი ლაზიერი განლაგებული იქნება განსხვავებულ ვერტიკალზე (და ჰორიზონტალზეც). ავირჩიოთ რაიმე მიმართულება ლაზიერების დასმისათვის: ვთქვათ ,ზემოდან ქვემოთ და მარცხნიდან მარჯვნივ. პირველი ლაზიერი დავსვათ (1,1) უჯრაზე და დავიწყოთ თავისუფალი უჯრის ძებნა მეორე სვეტში. პირველივე თავისუფალ უჯრაზე დავსვათ მეორე ლაზიერი და დავიწყოთ თავისუფალი უჯრის ძებნა მესამე სვეტში და ა.შ. საზოგადოდ თუკი 1-დან i-ური სვეტის ჩათვლით ლაზიერები დავსვით, (i+1)-ე სვეტში ვიწყებთ თავისუფალი უჯრის ძებნას (ანუ ისეთი უჯრისას, რომელსაც არცერთი უკვე დასმული ლაზიერი არ ემუქრება). თუკი ასეთი უჯრა მოინახა, ვსვამთ (i+1)-ე ლაზიერს და ვამოწმებთ, ხომ არ მივაღწიეთ N-ურ სვეტს (მაშინ ამონახსნი უკვე მიგვიღია), ხოლო თუკი (i+1)-ე სვეტში თავისუფალი უჯრა არ არის, მაშინ დაფიდან ვიღებთ i-ურ ლაზიერს (ანუ ვახორციელებთ უკან დაბრუნებას) და ვცდილობთ მოვძებნოთ მისთვის თავისუფალი უჯრა იმ უჯრის ქვემოთ, სადაც ის აქამდე იყო მოთავსებული. თუ ასეთი უჯრა არ მოიძებნა, დაფიდან ვიღებთ (i-1)-ე ლაზიერს და ა.შ.

5 N-ლაზიერის ამოცანა

6 პირველი 2 ამოხსნა 92-დან, რომელიც ზემოთ აღწერილი ალგორითმით მიიღება
N-ლაზიერის ამოცანა პირველი 2 ამოხსნა 92-დან, რომელიც ზემოთ აღწერილი ალგორითმით მიიღება

7 N-ლაზიერის ამოცანა . 92-ივე ამოხსნა 8x8 ზომის დაფისათვის. თითოეული ამონახსნი ჩაწერილია 8 ციფრით. ციფრის პოზიცია ჩანაწერში შეესაბამება სვეტის ნომერს, ხოლო თავად ციფრი - სტრიქონის ნომერს. ამოხსნები შეიძლება დაიყოს 23 ოთხეულად, სადაც თითოეულ ოთხეულში შემავალი ამოხსნები ერთმანეთისაგან მიიღება დაფის შემობრუნებით.

8 N-ლაზიერის ამოცანა პირველი ამოხსნის პოვნისათვის საჭირო სვლების რაოდენობა ამოხსნების რაოდენობა სხვადასხვა ზომის დაფისათვის

9 N-ლაზიერის ამოცანა #include <stdio.h> #include <stdlib.h>
#define N 9 int x[N]; void print () { int i; for (i=0; i<N; i++) printf ("%d",x[i]); system("PAUSE"); } int is_free (int ix, int iy) { for (i=0; i<iy; i++) if ((x[i]==ix) || (abs(x[i]-ix)==abs(i-iy))) return 0; return 1; } void svla (int n) { int i; if (n==N) print(); else for (i=0; i<N; i++) if (is_free(i,n)>0) { x[n]=i; svla (n+1); } int main ( ){ svla (0); return 0; system("PAUSE"); But each new placement must be checked for potential conflicts with the previous queen. If there is a conflict, then the newly-placed queen is shifted rightward.


Download ppt "N-ლაზიერის ამოცანა ვთქვათ, მოცემულია საჭადრაკო დაფა და 8 ლაზიერი"

Similar presentations


Ads by Google