Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: [ Sovled ] Chu Trình Hamilton

  1. #1
    Ngày gia nhập
    07 2007
    Bài viết
    7

    Angry [ Sovled ] Chu Trình Hamilton

    Các bác có ai cho em code của bài tìm chu trình Hamilton ko?
    Code theo thuật quay lui. nhưng code hoài ko ra? (có sử dụng đệ quy)
    Thanks.
    (=D)> (:=(|) Luôn mong muốn mình sẽ pro hơn hahahha(:#) (:#)

  2. #2
    Ngày gia nhập
    07 2007
    Bài viết
    7

    Đây là code của em mấy bác có thể góp ý được ko vậy
    Code:
    #include "stdio.h"
    #include "malloc.h"
    
    #define MAX 30
    typedef struct node 
    {
    	int dinh;
    	node *next;
    }node;
    
    node* Ke[MAX];
    int CT[MAX];
    int sodinh;
    int Duyet[MAX];
    //initialize
    int dem=0;
    
    void input()
    {
    	int m,a,b;
    	printf("Nhap vao so canh va dinh:");
    	scanf("%d%d",&m,&sodinh);
    	for(int j=0;j<sodinh;j++)
    		Duyet[j]=1;
    	int i;
    	for(i=0;i<sodinh;i++)
    		Ke[i]=NULL;
    	for(i=0;i<m;i++) //them cac dinh vao ds ke
    	{
    		printf("Dinh 1& 2 canh %d:",i);
    		scanf("%d%d",&a,&b);
    
    		node *p;
    		p=(node*)malloc(sizeof(struct node));
    		if(p==NULL)	return;
    		p->dinh=a;
    		p->next=Ke[b];
    		Ke[b]=p;
    
    		p=(node*)malloc(sizeof(struct node));
    		if(p==NULL)	return;
    		p->dinh=b;
    		p->next=Ke[a];
    		Ke[a]=p;
    	}
    }
    
    
    //k la bien linh dong de dem so dinh duyet
    void Hamilton(int x)
    {
    	node *temp;
    	static int k=0;
    	k++;
    	int kt=0;
    	Duyet[x-1]=0;
    	for(temp=Ke[x];temp!=NULL;temp=temp->next)
    	{	if(temp->dinh==3&&k==sodinh)
    		{
    			CT[k]=x;
    			//Xuat chu trinh
    			for(int q=0;q<k;q++)
    				printf("%4d",CT[q]);
    			printf("\n");
    		}
    		else 
    			if(Duyet[temp->dinh-1])
    			{
    				kt=1;
    				CT[k]=temp->dinh;
    				Hamilton(temp->dinh);
    				kt=0;
    			}
    	}
    	if(kt==0)	{
    			        if(x!=3)
    				      Duyet[x-1]=1;
    			        k--;
    		           }
    }
    
    void main()
    {
    	input();
    	//khoi dong
    	CT[0]=3;
    	Hamilton(3); // o day ta cho 3 la dinh bat dau, co the bat dau tu dinh bk trong do thi
    }
    (=D)> (:=(|) Luôn mong muốn mình sẽ pro hơn hahahha(:#) (:#)

  3. #3
    Ngày gia nhập
    12 2006
    Bài viết
    28

    Mình đã thư code nhưng thấy nó có lỗi đấy !
    không chạy được !!
    Code:
    temp->dinh==3&&k==sodinh
    bạn có thể giải thích rõ chổ này không ?
    Cám ơn nhiều !

  4. #4
    Ngày gia nhập
    09 2007
    Bài viết
    724

    đây là bài hamilton mình mới chỉ viết cho nó xuất ra một chu trình hamilton bất kỳ. chứ không phải là chu trình ngắn nhất.
    PHP Code:
    int CHamilton::RunAlg(int iCount,int iDinh)
    {        
        if(
    iCountg.GetN()) // nếu mà số lần thực hiện lớn hơn số đỉnh của đồ thị g thì kết thúc
            
    return 1;
        for(
    int i=0i<g.GetN(); i++)
            if(
    g.GetArrayElement(iDinh,i) && !pStatus[i]) // nếu có đường đi từ iDinh tới đỉnh i và đỉnh i chưa được xét
            
    {
                
    pVisit[iCount] = i// cập nhật lại đỉnh đã qua tại lần iCount là i
                
    pStatus[i] =  1// đánh dấu đã thăm i
                
    RunAlg(iCount+1,i); //gọi đệ qui lại với đỉnh i
                
    pStatus[i] = 0// bỏ đánh dấu đã thăm đỉnh i
            
    }
        return 
    1;


Các đề tài tương tự

  1. Bài tập C++ Thuật toán quay lui tìm chu trình Hamilton. Cho em hỏi
    Gửi bởi chuong01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 13-11-2015, 12:25 PM
  2. Xin ý tưởng bài tìm chu trình Hamilton có độ dài nhỏ nhất
    Gửi bởi chuong01 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 28-01-2011, 10:33 PM
  3. Tìm chu trình Hamilton có độ dài nhỏ nhất bằng Quy Hoạch Động
    Gửi bởi chuong01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 19-11-2010, 07:21 PM
  4. Chu trình hamilton, sắp xếp đội bóng. Giúp mình sửa lỗi?
    Gửi bởi thanhtri_100188 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 11-05-2009, 12:49 PM
  5. [ Sovled ] [BT] ko hiểu vì sao lại sai(in*)
    Gửi bởi boy_popping trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 09-05-2008, 08:22 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn