Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

_Euler_

Thuật toán tìm đường đi Euler:

Bước 1 (Khởi tạo):

            u=< đỉnh có deg+(1)-deg-(1) =1 >; stack = f; CE = f;

u => Stack; // Đưa u vào stack;

// chu trình       u=< đỉnh bất kỳ >; stack = f; CE = f;

u => Stack; // Đưa u vào stack;

Bước 2 (Lặp):

            while (stack ≠f) {

                        v = <đỉnh đầu stack>;

                        if (Ke(v) ≠ f )  {

                                    t =<đỉnh đầu trong danh sách Ke(v)>;

                                    t => Stack; // đưa t vào stack;

                                    E = E \(v,t); //loại bỏ cạnh (v,t) đã đi qua;

                        }

                        else { // nếu Ke(v) = f

                                    v = Pop(Stack); v=>CE; //Lấy v ra khỏi Stack và đưa vào CE

                        }

            }

Bước 3 (Trả lại kết quả)           Lật ngược các đỉnh đã được lưu trong CE ta nhận được đường đi Euler.

CODE

#include <conio.h>

#include <stdio.h>

#include <iostream.h>

#include <fstream.h>

/*********/

int *CE;

struct stack{

            int* value;

            int k;

} *STACK;

/*********/

void create(stack *s,int size){

            s->value = new int[size];

            s->k = 0;

}

void push(stack *s,int value){

            s->value[s->k] = value;

            s->k++;

}

int pop(stack *s){

            s->k--;

            return(s->value[s->k]);

}

int top(stack *s){

            return s->value[s->k-1];

}

int empty(stack *s){

            return(!s->k);

}

/*********/

void euler(int **matrix,int n){

            /* Khoi tao */

            int i,topValue,k=0;

            push(STACK,0);

            //

            while(!empty(STACK)){

                        topValue=top(STACK);

                        for(i=0;i<n;i++){

                                    if(matrix[topValue][i] != 0){

                                                push(STACK,i);

                                                matrix[topValue][i]=0;

                                                break;

                                    }

                        }

                        if(i==n){

                                    topValue = pop(STACK);

                                    CE[k] = topValue;

                                    k++;

                        }

            }

            //IN KQ

            printf("

Chu trinh Euler :

");

            for(i=k-1;i>=0;i--){

                        printf("%d ",CE[i]+1);

            }

}

void main(){

            clrscr();

            int **a,k,i,j,stackSize = 0;

            FILE *in;

            in = fopen("input.txt","r");

            //Doc chi so mang va tao mang 2 chieu

            fscanf(in,"%d",&k);

            a = new int*[k];

            for(i=0;i<k;i++){

                        a[i] = new int[k];

            }

            //Doc gia tri mang

            for(i=0;i<k;i++){

                        for(j=0;j<k;j++){

                                    fscanf(in,"%d",&a[i][j]);

                        }

            }

            //In mang ma tran

            for(i=0;i<k;i++){

                        for(j=0;j<k;j++){

                                    printf("%d ",a[i][j]);

                        }

                        printf("

");

            }

            //Tinh toan co stack

            for(i=0;i<k;i++){

                        for(j=0;j<k;j++){

                                    if(a[i][j] != 0){

                                                stackSize++;

                                    }

                        }

            }

            //Tao stack va mang CE

            create(STACK,stackSize);

            CE = new int[stackSize+1];

            //

            euler(a,k);

            getch();

}

Bạn đang đọc truyện trên: Truyen247.Pro

Tags: #zzz