RWC i zabawki. czyli odwrócone. Wieże Hanoi

Podobne dokumenty
Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

Wstęp do Programowania Lista 1

Wykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch

Laboratorium nr 1. i 2.

Rekurencja. Przygotowała: Agnieszka Reiter

RÓWNANIA NIELINIOWE Maciej Patan

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Wykład 3. Metoda dziel i zwyciężaj

Algorytm grupowania danych typu kwantyzacji wektorów

Grupowanie Witold Andrzejewski, Politechnika Poznańska, Wydział Informatyki 201/633

Algorytmy i Struktury Danych, 2. ćwiczenia

Raport z projektu. Przedmiot: Algorytmy i struktury danych 1 Projekt: Wieża Hanoi Autor: Wojciech Topolski

Matlab Składnia + podstawy programowania

Wykład 2. Poprawność algorytmów

Strategie ewolucyjne (ang. evolu4on strategies)

Algorytmy i struktury danych

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

1. Indeksy/indeksowanie : Do elementów wektora, list, macierzy czy ramek, można się odwołać na kilka sposobów.

Obliczenia iteracyjne

Algorytmy z powrotami. Algorytm minimax

Programowanie dynamiczne

Maxima i Visual Basic w Excelu

Wstęp do Informatyki

do MATLABa programowanie WYKŁAD Piotr Ciskowski

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 9 Rekurencja

Pętle iteracyjne i decyzyjne

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Java Podstawy. Michał Bereta

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Programowanie w VB Proste algorytmy sortowania

ZŁOŻONOŚĆ OBLICZENIOWA ALGORYTMÓW

Konstrukcje warunkowe Pętle

Podstawowe algorytmy i ich implementacje w C. Wykład 9

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Instrukcja warunkowa i wyboru

Przedmiot: Informatyka w inżynierii produkcji Forma: Laboratorium Temat: Zadanie 5. MessageBox, InputBox, instrukcja Select Case i instrukcje pętli.

Wstęp do informatyki Ćwiczenia. Piotr Fulmański

Wstęp do programowania

Filtracja obrazów. w dziedzinie częstotliwości. w dziedzinie przestrzennej

ECDL Podstawy programowania Sylabus - wersja 1.0

Program szkolenia PODSTAWY VBA (VISUAL BASIC FOR APPLICATIONS) I FORMULARZE.

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PODSTAWOWY.

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy.

Projekt 6: Równanie Poissona - rozwiązanie metodą algebraiczną.

Matlab Składnia + podstawy programowania

if (wyrażenie ) instrukcja

1 Wprowadzenie do algorytmiki

WHILE (wyrażenie) instrukcja;

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PRZEKROJOWY.

Algorytmy i struktury danych

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Wstęp do programowania

do instrukcja while(wyrażenie);

Programowanie w Scilab

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Grafika PHP dla początkujących

Wstęp do programowania

Proste programy w C++ zadania

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Równania nieliniowe, nieliniowe układy równań, optymalizacja

Wstęp do sieci neuronowych, wykład 11 Łańcuchy Markova

UKŁADY RÓWNAŃ LINIOWYCH - Metody dokładne

Metody algortmiczne (Algorytmy Część IV)

EGZAMIN DYPLOMOWY, część II, Biomatematyka

Wstęp do programowania

Wprowadzenie do Scilab: podstawy języka Scilab

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Program na zaliczenie: Odejmowanie widm

KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT

FUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end;

Funkcje i instrukcje języka JavaScript

Data Mining Wykład 3. Algorytmy odkrywania binarnych reguł asocjacyjnych. Plan wykładu

WYMAGANIA EDUKACYJNE. Programowanie Aplikacji Internetowych klasa III

Równania nieliniowe, nieliniowe układy równań, optymalizacja

Programowanie w języku Python. Grażyna Koba

Wstęp do Programowania potok funkcyjny

Kolejny krok iteracji polega na tym, że przechodzimy do następnego wierzchołka, znajdującego się na jednej krawędzi z odnalezionym już punktem, w

WHILE (wyrażenie) instrukcja;

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

Ćwiczenie 1. Wprowadzenie do programu Octave

DECLARE VARIABLE zmienna1 typ danych; BEGIN

1 abbbaabaaabaa -wzorzec: aaba

Instrukcje sterujące. Programowanie Proceduralne 1

UKŁADY RÓWNAŃ LINIOWYCH -Metody dokładne

Algorytm selekcji Hoare a. Łukasz Miemus

Informatyka 1. Procedury i funkcje, struktura programu w Pascalu

LIVE Gra w życie. LIVE w JavaScript krok po kroku. ANIMACJA Rozpoczynamy od podstawowego schematu stosowanego w animacji

Algorytmy sortujące i wyszukujące

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Obliczenie azymutów ze współrzędnych punktów tablica struktur punktów, tablica struktur azymutów

Geomatyka02 Wczytanie danych, obliczenie długości, azymutu i kąta ze współrzędnych. Przygotowanie do pracy

Instrukcja wdrożenia zmian w programie ProLider. ( Zmiany wprowadzone w wersji )

Informatyka I. Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli. Dr inż. Andrzej Czerepicki

Transkrypt:

RWC i zabawki czyli odwrócone Wieże Hanoi

zwykłe i odwrócone wieże Hanoi zabawka dla dzieci od lat 5

wieże Hanoi idea:

Algorytm powinien losować: z której kolumny (drążka) pobrać krążek w którą kolumnę (na który drążek) włożyć krążek Przełożenie powinno być wykonane tylko wtedy, kiedy z bazy reguł wynika, że dany ruch jest możliwy

Baza reguł: możliwy jest tylko następujący ruch: na mniejszy krążek można położyć tylko większy krążek

SAR WCZYAJ USAWIEIA POCZĄKOWE SRUKURY LOSUJ SKĄD LOSUJ DOKĄD SKĄD!=DOKĄD? WYBRAY DRĄŻEK SKĄD PUSY? AJWIĘKSZY K. DOKĄD MIEJSZY OD K. SKĄD? PRZEIEŚ KRĄŻEK ZAPISZ WYKOAY RUCH JES POWÓRZEIE? CEL OSIĄGIĘY? USUŃ IEPORZEBE KROKI SOP

tworzymy macierz aktualnego ruchu i zapisujemy ją ustawieniem początkowym położenie i szerokość krążka WCZYAJ USAWIEIA POCZĄKOWE SRUKURY m=[0 0 3; 0 0 2; 0 0 1];

SAR WCZYAJ USAWIEIA POCZĄKOWE SRUKURY LOSUJ SKĄD LOSUJ DOKĄD SKĄD!=DOKĄD? WYBRAY DRĄŻEK SKĄD PUSY? AJWIĘKSZY K. DOKĄD MIEJSZY OD K. SKĄD? PRZEIEŚ KRĄŻEK ZAPISZ WYKOAY RUCH JES POWÓRZEIE? CEL OSIĄGIĘY? USUŃ IEPORZEBE KROKI SOP

wybór drążka, z którego zabieramy krążek wybór drążka, na który położymy krążek skad=fix((rand(1,1))*k0)+1; dokad=fix((rand(1,1))*k0)+1; LOSUJ SKĄD liczba kolumn LOSUJ DOKĄD

SAR WCZYAJ USAWIEIA POCZĄKOWE SRUKURY LOSUJ SKĄD LOSUJ DOKĄD SKĄD!=DOKĄD? WYBRAY DRĄŻEK SKĄD PUSY? if skad~=dokad AJWIĘKSZY K. DOKĄD MIEJSZY OD K. SKĄD? PRZEIEŚ KRĄŻEK ZAPISZ WYKOAY RUCH JES POWÓRZEIE? CEL OSIĄGIĘY? USUŃ IEPORZEBE KROKI SOP

SAR WCZYAJ USAWIEIA POCZĄKOWE SRUKURY LOSUJ SKĄD LOSUJ DOKĄD SKĄD!=DOKĄD? WYBRAY DRĄŻEK SKĄD PUSY? AJWIĘKSZY K. DOKĄD MIEJSZY OD K. SKĄD? [y,i]=max(m(:,skad)); if y>0 skąd PRZEIEŚ KRĄŻEK ZAPISZ WYKOAY RUCH JES POWÓRZEIE? CEL OSIĄGIĘY? USUŃ IEPORZEBE KROKI np. 0 0 0 0 0 2 0 3 1 SOP

SAR WCZYAJ USAWIEIA POCZĄKOWE SRUKURY LOSUJ SKĄD LOSUJ DOKĄD SKĄD!=DOKĄD? np. 0 0 0 0 0 2 0 3 1 skąd WYBRAY DRĄŻEK SKĄD PUSY? AJWIĘKSZY K. DOKĄD MIEJSZY OD K. SKĄD? PRZEIEŚ KRĄŻEK ZAPISZ WYKOAY RUCH [y,i]=max(m(:,skad)); [...] [y1,i1]=max(m(:,dokad)); if y>y1 JES POWÓRZEIE? CEL OSIĄGIĘY? USUŃ IEPORZEBE KROKI SOP

SAR WCZYAJ USAWIEIA POCZĄKOWE SRUKURY np. skąd LOSUJ SKĄD LOSUJ DOKĄD SKĄD!=DOKĄD? 0 0 0 0 0 2 0 3 1 WYBRAY DRĄŻEK SKĄD PUSY? [y1,i1]=max(m(:,dokad)); if y>y1 AJWIĘKSZY K. DOKĄD MIEJSZY OD K. SKĄD? PRZEIEŚ KRĄŻEK ZAPISZ WYKOAY RUCH JES POWÓRZEIE? CEL OSIĄGIĘY? USUŃ IEPORZEBE KROKI if y1>0 m(i1-1,dokad)=m(i,skad); else m(w0,dokad)=m(i,skad); end m(i,skad)=0; i- pozycja max. wartości w kolumnie skąd SOP

SAR WCZYAJ USAWIEIA POCZĄKOWE SRUKURY LOSUJ SKĄD LOSUJ DOKĄD SKĄD!=DOKĄD? WYBRAY DRĄŻEK SKĄD PUSY? AJWIĘKSZY K. DOKĄD MIEJSZY OD K. SKĄD? PRZEIEŚ KRĄŻEK ZAPISZ WYKOAY RUCH JES POWÓRZEIE? CEL OSIĄGIĘY? SOP USUŃ IEPORZEBE KROKI ii=ii+1; mm(:,:,ii)=m;

SAR WCZYAJ USAWIEIA POCZĄKOWE SRUKURY LOSUJ SKĄD LOSUJ DOKĄD SKĄD!=DOKĄD? WYBRAY DRĄŻEK SKĄD PUSY? AJWIĘKSZY K. DOKĄD MIEJSZY OD K. SKĄD? PRZEIEŚ KRĄŻEK ZAPISZ WYKOAY RUCH JES POWÓRZEIE? CEL OSIĄGIĘY? SOP USUŃ IEPORZEBE KROKI sprawdź, czy ostatnia, wygenerowana sekwencja nie wraca do stanu z przeszłości s1 jeżeli tak, usuń wszystkie kroki począwszy od s1+1 aż do ostatniego stanu

mm(:,:,1) = 0 0 3 0 0 2 0 0 1 s1 mm(:,:,2) = 0 0 0 0 0 2 3 0 1 s1+1 mm(:,:,3) = 0 0 3 0 0 2 0 0 1 s1+2 (ostatni)

for ss=ii-1:-1:1 if mm(:,:,ss)==mm(:,:,ii) ii=ss; mm=mm(:,:,1:ss); break end end

SAR WCZYAJ USAWIEIA POCZĄKOWE SRUKURY LOSUJ SKĄD LOSUJ DOKĄD SKĄD!=DOKĄD? WYBRAY DRĄŻEK SKĄD PUSY? np. m(1,1) AJWIĘKSZY K. DOKĄD MIEJSZY OD K. SKĄD? PRZEIEŚ KRĄŻEK ZAPISZ WYKOAY RUCH 0 0 0 0 0 2 0 3 1 JES POWÓRZEIE? CEL OSIĄGIĘY? SOP USUŃ IEPORZEBE KROKI while m(1,1)~=w0

m=[0 0 3; 0 0 2; 0 0 1]; mm=[]; [w0 k0]=size(m); for ss=ii-1:-1:1 if mm(:,:,ss)==mm(:,:,ii) ii=ss; mm=mm(:,:,1:ss); break end end ii=1; mm(:,:,ii)=m; end mm while m(1,1)~=w0 skad=fix((rand(1,1))*k0)+1; dokad=fix((rand(1,1))*k0)+1; if skad~=dokad [y,i]=max(m(:,skad)); if y>0 [y1,i1]=max(m(:,dokad)); if y>y1 if y1>0 m(i1-1,dokad)=m(i,skad); else m(w0,dokad)=m(i,skad); end m(i,skad)=0; ii=ii+1; mm(:,:,ii)=m; end end end

uruchamiamy program reah2.m