Anda di halaman 1dari 10

Prims Algorithm adalah sebuah algoritma dalam teori graf untuk minimum spanning tree untuk sebuah graf

berbobot yang saling terhubung. Instruksi :

1.Tentukan terlebih dahulu satu vertex untuk titik awal


2. Buatlah sebuah himpunan yang terdiri dari edges yang terhubung dengan vertex yang dipilih kemudian pilih edges terkecil dan yang tidak membentuk sirkuit jika ditambahkan dari himpunan tersebut 3. Ulangi langkah ke-2 sampai semua vertex terhubung menjadi sebuah minimum spanning tree

e d i f b g h

j a

Kemudian dari vertex B,F,H ,I dan J terpilih BG yang Pertama Selanjutnya Lalu Maka, dari jumlah memilih vertex dari pematang A,Edan B,C,E B,C, vertex edge F,H A B,C, dan sembarang minimum dan F B,C,D,E dan terdapat D,F F E tepilih J terdapat terpilih dan yang dan CD edge F dilubangi terpilih disini yang edge CH AB,EJ,ED,FJ,FG yang merupakan dipilih AF,AB,EJ,ED DI EJ agar merupakan karena edge air terkuras AE habis adalah : B,E dan F terdapat edge merupakan edge dengan minimum dan ED edge 1+2+3+4+5+7+8+9+10=4 dengan terpilih dengan bobot AF AB bobot yang minimum minimum merupakan 9bobot dari yaitu EJ edge edge yaitu 5yang dengan dengan bobot bobot bobot 6 akan BC,BG,EJ,ED,FJ,FG dan terpilih BC merupakan edge minimum membentuk sirkuit jika yaitu ditambahkan dengan bobot minimum 4

Masalah largest increasingmonotonically subsequence adalah untuk mencari subsequence dari suatu urutan dimana elemen subsequence dalam urutan terurut, terkecil hingga tertinggi, dan dimana urutan tersebut dibuat sepanjang mungkin. Instruksi / Algoritmanya :
1. Inputkan jumlah elemen dalam urutan (integer)

2.
3. 4.

Inputkan urutan angka, inputan bilangan bulat dipisahkan oleh spasi


Program mencari seluruh urutan, satu indeks dalam satu waktu Program menemukan monoton sub urutan yang terus bertambah

5.
6. 7.

Program menyimpan sub urutan ke dalam temporary


Looping dari program akan berhenti ketika sub urutan telah mencapai maks Program menampilkan sub urutan yang terpanjang, dan posisi dari bilangan pertama sub urutan tersebut

/*Algoritma :

1. Buat treenya
2. Cari panjang maksimum LMISnya (dfs) 3. Cari setiap subsequence yang sesuai dengan panjang maksimum*/ #include<cstdio> #include<vector> #include<map> #include<cstring> using namespace std;

typedef vector <int> vi;


void dfs(int v, int d); void track(int v, int d); int maxx = 0;

vector <vi> tree;


vi lmis; map <int, int> m; bool visited[100];

int main()

{
vi in; int N,x; scanf("%d",&N); // masukkan banyak angka in.push_back(-1); // root

tree.push_back(vi());
for(int i=0;i<N;++i) { scanf("%d",&x); in.push_back(x); tree.push_back(vi()); } for(int i=0;i<N+1;++i) { m[in[i]] = i; for(int j=i+1;j<N+1;++j) if (in[i] < in[j]) tree[i].push_back(in[j]); } memset(visited,0,sizeof visited); dfs(-1,0); // cari panjang maksimum LMIS & gambar tree per level printf("Panjang LMIS = %d\n",maxx); memset(visited,0,sizeof visited); track(-1,0); // cari subsequence yang LMIS return 0; }

void dfs(int v, int d) { if (visited[m[v]]) return; visited[m[v]] = 1; for(int i=0;i<d;++i) printf("\t");

printf("%d\n",v);
if (d > maxx) maxx = d; for(vi::iterator it=tree[m[v]].begin();it!=tree[m[v]].end();++it) { if (!visited[m[*it]]) { dfs(*it,d+1); visited[m[*it]] = 0; } } }

void track(int v, int d) { if (visited[m[v]]) return; visited[m[v]] = 1;

if (v != -1) lmis.push_back(v);
if (d==maxx) { for(int i=0;i<maxx;++i) printf("%d ",lmis[i]); printf("\n"); } for(vi::iteratorit=tree[m[v]].begin();it!=tree[m[v]].end();++it) { if (!visited[m[*it]]) { track(*it,d+1); visited[m[*it]] = 0; lmis.pop_back(); } } }

Ini termasuk contoh tree karena tidak terdapat siklus (aliran listrik satu arah menuju akhir rumah dan tidak timbal balik) dan semua rumah/Vertex sudah teraliri listrik.

Pemilihan lajur aliran listrik berdasarkan bobot terendah / efesiensi terbesar.

Anda mungkin juga menyukai