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... ♥

Phuong phap quay lui va thu sai

Yêu cầu:

Viết chương trình cho các thuật toán đã phân tích và xây dựng

(Theo ngôn ngữ C)

1.Bài toán tìm đường trong mê cung:

Xét mê cung như một đồ thị bao gồm các nút và các cạnh nối biểu hiện các đường đi giữa các nút.

Tìm đường đi từ nút A đến nút B

M = (Mij)

m(ij) = 1 Nếu có cạnh nối từ i đến j

m (ij) = 0 nếu ngược laj

Bộ nghiệm đường đi cần xác định dãy v1...vn

Với v1=A;vn=B;vi=1...n(vi A,B)

Thuật toán:

Try(i)

For(vi=1...n)

If(m v = 1 and Daqua[v ] = False)

x = v

Daqua[v] = True

If(xi=B)( là trạng thái kết thúc thì in ra nghiệm x1,...,xi)

Else Try(i+1)

Daqua[i] = False

End

2. Bài toán liệt kê dãy nhị phân chiều dài n:

( Áp dụng giải thuật quay lui)

Liệt kê các cấu hình nghiệm: x1...xn;

Thuật toán:

x

Try(i)

For(v=0,1)

x =v;

if(i=n)

<In nghiệm (x1,...,xn)>

Else

Try (i+1)

End

3.Bài toán người bán hàng: (TSP)

Có n thành phố,được nối với nhau bởi các con đường có độ dài

d = Độ dài đường đi từ i đến j

d = Nếu không có đường đi

x = (x ,...,x ) x (1,m)

Thuật toán:

Vét cạn:

Sinh hoán vị n đỉnh

Mỗi hoán vị tính tổng chiều dài

Tìm hoán vị có tổng min

Quay lại:

Sinh phần tử i là đỉnh xi

Sinh tiếp phần tử i+1 là x nếu d

Tìm được 1 nghiệm, tính tổng chiều dài.

So sánh với tổng chiều dài ngắn nhất hiện có.

Cập nhật lại nếu cần

Thuật toán:

Try(i,s)

For(v=1...n)

If(Daqua[v] = false and d v )

T = S + d v

If(T < BestCost)

x = v

Daqua[v] = True

If( x = A and i = n+1)

< In nghiệm (x1,..,xn)>

<Chấp nhận BestCost)>

Else

Try(i+1,T)

Daqua[v] = False

End if

End if

End for.

Lời gọi ban đầu của thuật toán:

Daqua[v=1...n] = False

BestCost =

Try ( A,0);

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

Tags: #hành