Thursday, 20 April 2017

Menerapkan metode Breadth First Search dan Depth First Search menggunakan Python


# Breadth First Search (BFS)


          Breadth-first search adalah algoritma yang melakukan pencarian secara melebar yang       mengunjungi simpul secara preorder yaitu mengunjungi suatu simpul kemudian mengunjungi semua simpul yang bertetangga dengan simpul tersebut terlebih dahulu. Selanjutnya, simpul yang belum dikunjungi dan bertetangga dengan simpulsimpul yang tadi dikunjungi , demikian seterusnya. Jika graf berbentuk pohon berakar, maka semua simpul pada aras d dikunjungi lebih dahulu sebelum simpul-simpul pad aras d+1.

            Algoritma ini memerlukan sebuah antrian q untuk menyimpan simpul yang telah dikunjungi. Simpulsimpul ini diperlukan sebagai acuan untuk mengunjungi simpul-simpul yang bertetanggaan dengannya. Tiap simpul yang telah dikunjungu masuk ke dalam antrian hanya satu kali. Algoritma ini juga membutuhkan table Boolean untuk menyimpan simpul yang te lah dikunjungi sehingga tidak ada simpul yang dikunjungi lebih dari satu kali.

Nah disini kita langsung saja ke gambar grafik dan beserta contoh source code yang saya buat disini saya membuatnya menggunakan python


#Code Program

#contoh Peta
peta =  {'A':set(['B']),
         'B':set(['A','C','D']),
         'C':set(['B','E']),
         'D':set(['B','G','H']),
         'E':set(['C','F','G']),
         'F':set(['E']),
         'G':set(['D','E','I','J']),
         'H':set(['D','J']),
 'I':set(['G'])}
    

def bfs(graf, mulai, tujuan):
    queue = [[mulai]]
    visited = set()

    while queue:     
        # masukkan antrian paling depan ke variabel jalur
        jalur = queue.pop(0)

        # simpan node yang dipilih ke variabel state, misal jalur = C,B maka simpan B ke variabel state
        state = jalur[-1]

        # cek state apakah sama dengan tujuan, jika ya maka return jalur
        if state == tujuan:
            return jalur
        # jika state tidak sama dengan tujuan, maka cek apakah state tidak ada di visited
        elif state not in visited:
            # jika state tidak ada di visited maka cek cabang
            for cabang in graf.get(state, []): #cek semua cabang dari state
                jalur_baru = list(jalur) #masukkan isi dari variabel jalur ke variabel jalur_baru
                jalur_baru.append(cabang) #update/tambah isi jalur_baru dengan cabang
                queue.append(jalur_baru) #update/tambah queue dengan jalur_baru

            # tandai state yang sudah dikunjungi sebagai visited
            visited.add(state)

        #cek isi antrian
        isi = len(queue)
        if isi == 0:
            print("Tidak ditemukan")

# Hasil Program



#Depth First Search (DFS)


         Algoritma DFS (Depth First Search) adalah salah satu algoritma yang digunakan untuk pencarian jalur. Contoh yang dibahas kali ini adalah mengenai pencarian jalur yang melalui semua titik. 

         Algoritma ini mirip dengan Algoritma BFS (Breadth First Search) yang sudah dijelaskan sebelumnya. Jika Algoritma BFS (Breadth First Search) melakukan perhitungan secara terurut dari urutan pertama sampai urutan terakhir, maka algoritma ini melakukan kebalikannya, yaitu melakukan perhitungan secara terurut dari urutan terakhir. Setelah menghabiskan semua kemungkinan dari titik terakhir, barulah mundur ke titik-titik sebelumnya sampai pada titik pertama.

Nah disini kita langsung saja ke contoh source code yang saya buat disini saya membuatnya menggunakan python.


#Code Program
#contoh Peta
peta = {'A':set(['B']),
         'B':set(['A','C','D']),
         'C':set(['B','E']),
         'D':set(['B','G','H']),
         'E':set(['C','F','G']),
         'F':set(['E']),
         'G':set(['D','E','I','J']),
         'H':set(['D','J']),
 'I':set(['G'])}
    

def dfs(graf, mulai, tujuan):
    stack = [[mulai]]
    visited = set()

    while stack:     
        # masukkan antrian paling depan ke variabel jalur
        jalur = stack.pop(-1)

        # simpan node yang dipilih ke variabel state, misal jalur = C,B maka simpan B ke variabel state
        state = jalur[-1]

        # cek state apakah sama dengan tujuan, jika ya maka return jalur
        if state == tujuan:
            return jalur
        # jika state tidak sama dengan tujuan, maka cek apakah state tidak ada di visited
        elif state not in visited:
            # jika state tidak ada di visited maka cek cabang
            for cabang in graf.get(state, []): #cek semua cabang dari state
                jalur_baru = list(jalur) #masukkan isi dari variabel jalur ke variabel jalur_baru
                jalur_baru.append(cabang) #update/tambah isi jalur_baru dengan cabang
                stack.append(jalur_baru) #update/tambah queue dengan jalur_baru

            # tandai state yang sudah dikunjungi sebagai visited
            visited.add(state)

        #cek isi antrian
        isi = len(stack)
        if isi == 0:
            print("Tidak ditemukan")


# Hasil Program








      

Monday, 9 January 2017

Membuat rubik menggunakan basic4gl

Membuat rubik menggunakan basic4gl

Hasil Program



Coding Program

'variabel untuk posisi kamera
Dim pcamx# = 0
Dim pcamy# = 0
Dim pcamz# = 4

'variabel untuk posisi titik pandang
Dim prefx# = 0
Dim prefy# = 0
Dim prefz# = 0

'variabel perpindahan
Dim pindah# = 0.01

'variabel tekstur
Dim teksturkayu

teksturkayu = loadmipmaptexture("gambar/m.jpg")

glEnable(GL_TEXTURE_2D)

while true
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT)
glLoadIdentity()

gluLookAt(pcamx#, pcamy#, pcamz#, prefx#, prefy#, prefz#, 0, 1, 0)

glBindTexture(GL_TEXTURE_2D, teksturkayu)

glBegin (GL_QUADS) 'sisi belakang  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(1.0, 1.0, -1.0) 'kanan atas
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,0)
    glVertex3f(1.0, -1.0, -1.0) 'kanan bawah
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-1.0, -1.0, -1.0) 'kiri bawah
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,1)
    glVertex3f(-1.0, 1.0, -1.0) 'kiri atas
glEnd()

glBegin (GL_QUADS) 'sisi depan  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(1.0, 1.0, 1.0) 'kanan atas
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,0)
    glVertex3f(1.0, -1.0, 1.0) 'kanan bawah
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-1.0, -1.0, 1.0) 'kiri bawah
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,1)
    glVertex3f(-1.0, 1.0, 1.0) 'kiri atas
glEnd()

glBegin (GL_QUADS) 'sisi kiri  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(0,1)
    glVertex3f(-1.0, 1.0, -1.0)
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(-1.0, 1.0, 1.0)
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(1,0)
    glVertex3f(-1.0, -1.0, 1.0)
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-1.0, -1.0, -1.0)
glEnd()

glBegin (GL_QUADS) 'sisi kanan  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(0,1)
    glVertex3f(1.0, 1.0, -1.0)
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(1.0, 1.0, 1.0)
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(1,0)
    glVertex3f(1.0, -1.0, 1.0)
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(1.0, -1.0, -1.0)
glEnd()

glBegin (GL_QUADS) 'sisi atas  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(1,0)
    glVertex3f(1.0, 1.0, -1.0)
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(1.0, 1.0, 1.0)
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(0,1)
    glVertex3f(-1.0, 1.0, 1.0)
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-1.0, 1.0, -1.0)
glEnd()

glBegin (GL_QUADS) 'sisi bawah  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(1,0)
    glVertex3f(1.0, -1.0, -1.0)
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(1.0, -1.0, 1.0)
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(0,1)
    glVertex3f(-1.0, -1.0, 1.0)
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-1.0, -1.0, -1.0)
glEnd()

swapBuffers()

if scankeydown(VK_RIGHT) then    ' gerak ke kanan
pcamx# = pcamx# + pindah#
elseif scankeydown(VK_LEFT) then  ' gerak ke kiri
pcamx# = pcamx# - pindah#
elseif scankeydown(VK_UP) then  ' gerak ke atas
pcamy# = pcamy# + pindah#
elseif scankeydown(VK_DOWN) then  ' gerak ke bawah
pcamy# = pcamy# - pindah#
endif    

wend