1. Trang chủ
  2. » Giáo án - Bài giảng

Bai 1 cau truc du lieu va giai thuat

15 231 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 15
Dung lượng 95,83 KB

Nội dung

Chương 1: ĐỆ QUY 1. Tính giai thừa Function giaithua(n:integer):longint; Begin If n=1 then giaithua:=1 Else Giaithua:=giaithua(n-1)*n; End; 2. Tính Fibonacci Function fibo(n:integer):longint; Begin If (n=1) or (n=2) then fibo:=1 Else fibo:=fibo(n-1)+fibo(n-2); End; 3. Cho n nguyên dương, chuyển số n hệ 10 sang hệ 2 dùng đệ quy Procedure nhiphan(n:integer); Begin If n=1 then write(n) Else Begin Nhiphan(n div 2); Write(n mod 2); End; End; Begin Nhiphan(4); End. 4. Bài toán tháp Hà Nội Procedure chuyendia(n:integer;a,b,c:char); Begin If n=1 then Write(‘chuyen 1 dia tu ‘,a,’sang’,c) Else Begin Chuyendia(n-1,a,c,b); Chuyendia(1,a,b,c); Chuyendia(n-1,b,a,c); End; End; Begin Chuyendia(2,’a’,’b’,’c’); End; 5. Cho n nguyên dương, viết ra số ấy theo thứ tự đảo ngược bằng dùng đệ quy Procedure daonguoc(n:integer); Begin If n<10 then write(n) Else Begin Write(n mod 10); Daonguoc(n div 10); End; Begin Daonguoc(4567); End. 6. Liệt kê các hoán vị của N số tự nhiên Var A:array[1 100] of byte; Cn:array[1 100] of boolean; N,i:byte; Procedure try(i); Begin For j:=1 to n do If cn[j]=true then Begin X[i]:=j; Cn[j]:=false; If i=n then In ket qua Else Try(i+1); Cn[j]:=true; End; End; Begin Write(‘nhap n= ‘); readln(n); For i:=1 to n do Cn[i]:=true; Try(1); Readln; end; 7. Cho 1 số n nguyên dương, liệt kê các số nhị phân có độ dài bằng n Procedure try(i); Begin For j:= 0 to 1 do Begin X[i]:=j; If i=n then In kq Else Try(i+1); End; End; 8. Cho 1 số n nguyên dương, liệt kê các số nhị phân có độ dài bằng n sao cho không có 2 số 1 liền kề nhau Procedure try(i); Begin For j:=0 to 1 do If not(j=1) and(x[i-1]=1))then Begin X[i]:=j; If i= n then In kq Else Try(i+1); End; End; 9. 8 quân hậu Procedure try(i); Begin For j:=1 to 8 do If cot[j] and cc[i-j] and cp[i+j] then Begin X[i]:=j; Cot[j]:=false; Cc[i-j]:=false; Cp[i+j]:=false; If i=8 then In kq Else Try(i+1); Cot[j]:=true; Cc[i-j]:=true; Cp[i+j]:=true; End; End; 10. Cho 5 kí tự A,B,C,D,E và số n nguyên dương, hãy liệt kê các xâu kí tự có độ dài n được thành lập bởi 5 ký tự trên sao cho không có 2 ký tự liên tiếp giống nhau. Procedure try (i); Begin For j:=’a’ to ‘e’ do If x[i-1] <> j then Begin X[i]:=j; If i=n then In kq Else Try(i+1); End; End; 11. Cho 1 ba lô có trọng lượng w và n đồ vật, mỗi đồ vật thứ i có giá trị g[i] và trọng lượng là t[i] (mỗi đồ vật chỉ có 1 vật). Hãy tìm cách bỏ các đồ vật vào trong ba lô sao cho gái trị của ba lô là lớn nhất. Procedure try(i); Begin For j:=0 to 1 do If (tl >= t[i]*J) then Begin X[i]:=j; Giatri:=giatri+g[i]*j; Tl:=tl-t[i]*j If i=n then Begin If giatri>gttu then Begin Luux:=x; Gttu:=giatri; End; End Else Try(i+1); Giatri:=giatri-g[i]*j; Tl:=tl+t[i]*j; End; End; 12. Cho số n nguyên dương, kiệt kê cá cách phân tích số n thành tổng các số tự nhiên bé hơn n. Procedure try(i); Begin For j:=1 to n- 1 do If(tong+j<=n) and (j>=x[i-1]) then Begin X[i]:=j; Tong:=tong+j; If tong=n then Inkq(i) Else If i<n) then try(i+1); Tong:=tong-j; End; End; 13. Cho n ngôi nhà và m màu sơn liệt kê các cách sơn nhà. Procedure try(i); Begin For j:= 1 to m do Begin X[i]:=j; If i=n then In kq Else Try(i+1); End; End; 14. Cho dãy gồm n số nguyên dương, liệt kê tất cả các dãy con có tổng bằng s Procedure try(i); Begin For j:= 1 to n do If(tong+a[j]<=s) and cn[j] then Begin X[i]:=j; Tong:=tong+a[j]; Cn[j]:=false If tong=s then In kq(i) Else if (i<n) then Try(i+1); Tong:=tong-a[j]; Cn[j]:=true; End; End; 15. Cho dãy gồm n số nguyên dương, liệt kê theo thứ tự tất cả các dãy con có tổng bằng s Procedure try(i); Begin For j:= 1 to n do If(tong+a[j]<=s) and (j>x[i-1]) then Begin X[i]:=j; Tong:=tong+a[j]; If tong=s then In kq(i) Else if (i<n) then Try(i+1); Tong:=tong-a[j]; End; End; Chương 2: DANH SÁCH TUYẾN TÍNH 1. Tạo 1 danh sách có n nút( mỗi nút có một số nguyên) Procedure taods(n:integer; var l:tronut); Var p,q:tronut,i:integer; Begin For i:= 1 to n do Begin New(p); Write(‘nhap thong tin cua nut:’); Readln(p^.info); P^.link=nil; If l=nil then L:=p Else Q^.link:=p; Q:=p; End; End; 2. Duyệt danh sách P:=l; While p<>nil do Begin Xử lý nút p dạng trỏ; P:=p^.link; {p^.link là nút sau nó}; End; 2.1 In danh sách Procedure inds(l:tronut); Var p:tronut; Begin P:=l; While p<>nil do Begin Write(p^.info,’ ‘); P:=p^.link; {p^.link là nút sau nó}; End; End; 2.2. Tính tổng các nút Function tongds(l:tronut):integer; Var p:tronut; tong:integer; Begin P:=l; tong:=0 While p<>nil do Begin Tong:=tong+p^.ifno; P:=p^.link; {p^.link là nút sau nó}; End; Tongds:=tong; End; 2.3. Tìm phần tử bé nhất ở trong danh sách Function minds(l:tronut):integer; Var p:tronut; min:integer; Begin P:=l^link; Min:=l^.info; While p<>nil do Begin If p^.info<min then Min:=p^.info; P:=p^.link; End; Minds:=min; End; 2.4. Tìm nút có giá trị X Function timds(l:tronut;x:integer):tronut; Var p:tronut; Begin P:=l; While (p<>nil) and(p^.info<>x) do P:=p^.link; Timds:=p; End; 2.5. Tìm phần tử dương đầu tiên trong danh sách Function timduongdautien(l:tronut):tronut; Var p:tronut; Begin P:=l; While(p<>nil)and(p^.info<0)do P:=p^.link; Timduongdautien:=p; End; 2.6. Tìm phần tử dương bé nhất Function timduongbenhat(l:tronut):integer; Var p:tronut; min:integer; Begin P:=timduongdautien(l); If p=nil then writeln(‘khong cos phan tu dung’) Else Begin Min:=p^.info;p:=p^.link; While(p<>nil) do Begin If (p^.info>0)and (p^.info<min)do Min:=p^.info; P:=p^.link; end; timduongbenhat:=min; end; end; 3. Bổ sung một nút vào cuối danh sách Procedure bosung(var l:tronut;x:integer); Var p,q:tronut; Begin New(p); P^.info:=x; P^.link:=nil; If l=nil then l:=p Else Begin Q:=l; While q^.link<>nil do Q:=q^.link; Q^.link:=p; End; End; 4. Chèn 1 nút vào sau nút trỏ bởi M trong danh sách Procedure chen(var l:tronut;x:integer;m:tronut); Var p:tronut; Begin New(p); P^.info:=x; P^.link:=m^.link; M^.link:=p; End; 5. Xóa nút được trỏ bởi M Procedure xoanut(var l:tronut;m:tronut); Var p:tronut; Begin If l=m then l:=l^.link; Else Begin P:=l; While p^.link<>m do P:=p^.link; P^.link:=m^.link; End; Dispose(m); End; 6. Nối danh sách l2 vào cuối danh sách l1; Procedure noids(var l1:tronut;l2:tronut); Var p:tronut; Begin If l1=nil then l1:=l2; Else Begin P:=l1; While p^.link<>nil do P:=p^.link; P^.link:=l2; End; End; Chương II: NGĂN XẾP VÀ HÀNG ĐỢI I. Ngăn xếp (stack) 1. Bổ sung: Procedure bosung(x); Begin If top=n then write(‘Day stack day’); Else Begin Top:=top+1; Stack[top]:=x; End; End; Procedure bosung(var top:tronut;x:integer); Var p:tronut; Begin New(p); P^.info:=x; P^.link:=top; Top:=p; End; 2. Loại bỏ: Function loaibo; Begin If top=0 then write(‘can stack roi’) Else Begin Top:=top-1; Loaibo:= Stack[top+1]; End; End; Function loaibo(var top:tronut); Var p:tronut;x:integer; Begin X:=top^.info; P:=top; Top:=top^.link; Dispose(p); Loaibo:=x; End; 3. Chuyển hệ 10 sang hệ 2 Procedure chuyen10_2(n:integer); Begin While n<>0 do Begin Bosung(top,n mod 2); N:=n div 2; End; While top <> nil do Write(loaibo(top)); End; II. Hàng đợi (queue) [...]... ĐỒ THỊ 1 Duyệt rộng Procedure duyetrong(u); Begin Bosung queue(u); chuatham[u]:=false; While queueÆ do Begin V:=loaibo queue; Tham v;{xử lý v} For i:= 1 to n do If chuatham[i] and (ke[v,i] =1) then Begin Bosung queue(i); Chuatham[i]:=false; Else; End; End; 2 Duyệt sâu: Procedure duyetsau(u); Begin Bosung stack(u); chuatham[u]:=false; While stackÆ do Begin V:=loaibo stack; Tham v; For i:= 1 to n... Function ktll:boolean; Begin Duyetrong (1) ; I: =1; While(in then ktll:=true Else ktll:=false; End; 5 Đồ thị không liên thông, đếm số thành phần không liên thông Function demtplt:byte; Begin Dem:=0; For i:= 1 to n do If chuatham[i] then Begin Dem:=dem +1; Duyetrong(i); End; Demtplt:=dem; End; 6 Tìm đường đi từ đỉnh này đến đỉnh kia procedure timkiemrong(u); Begin... stack; Tham v; For i:= 1 to n do If chuatham[i] and (ke[v,o] =1) then Begin Bosungstack(i); Chuatham[i]:=false; End; End; End; Procedure duyetsaudq(u); Begin Tham u; Chuatham[u]:=false; For i:= 1 to n do If chuatham[i] and(ke[u,i] =1) then Duyetsaudq(i); End; 3 Kiểm tra 2 đỉnh có liên thông không: Function kiemtra2dinhlt(u,v:integer):boolean; Begin Duyetrong(u); If chuatham[v] then kiemtra2dinhlt:=false Else.. .1 Bổ sung: Procedure bosung(x); Begin If top=n then writeln(‘day’) Else Begin Top:=top +1; Queue[top]:=x; If bottom = 0 then bottom: =1; End; End; Procedure bosung(var top,bottom:tronut;x:integer); Var p:tronut; Begin New(p); P^.info:=x; P^.link:=nil; If topnil then top^.link:=p; Top:=p; If bottom=nil... Bottom:=bottom +1; Loaibo:=queue[bottom -1] ; If bottom>top then bottom:=top:=0; End; End; Function loaibo (var top,bottom:tronut); Begin If bottom=nil then write(‘queue rong’) Else Begin Loaibo:=bottom^.info; P:=bottom; Bottom:=bottom^.link; Dispose(p); If bottom=nil then top:=nil; End; End; Chương 3: CẤU TRÚC CÂY 1 Khai báo cây Type trocay=^cay; Cay=record Info:kiểu; L,r:trocay; End; 2 Duyệt cây theo... End; 2 Duyệt cây theo thứ tự trước Procedure thamgtp(root:trocay) Begin If rootnil then Begin Thăm gốc;{xử lý nút gốc} Thamgtp(root^.L); Thamgtp(root^.r); End; End; 3 Duyệt theo thứ tự giữa (tgp) Procedure thamtgp(root:trocay) Begin If rootnil then Begin Thamtgp(root^.L); Thăm gốc;{xử lý nút gốc} Thamtgp(root^.r); End; End; 4 Thăm theo thứ tự sau (TPG); Procedure thamtpg(root:trocay) Begin If rootnil... Demtplt:=dem; End; 6 Tìm đường đi từ đỉnh này đến đỉnh kia procedure timkiemrong(u); Begin Bosung(u);chuatham[u]:=false; While queueÆ do Begin V:=loaibo; If v=dich then xeit(‘tc’); For i:= 1 to n do If chuatham[i] and (ke[v,i] =1) then Begin Bosung(i);chuatham[i]:=false;truoc[i]:=v; End; End; End; . Chương 1: ĐỆ QUY 1. Tính giai thừa Function giaithua(n:integer):longint; Begin If n =1 then giaithua: =1 Else Giaithua:=giaithua(n -1) *n; End; 2. Tính Fibonacci. 1 liền kề nhau Procedure try(i); Begin For j:=0 to 1 do If not(j =1) and(x[i -1] =1) )then Begin X[i]:=j; If i= n then In kq Else Try(i +1) ; End; End; 9. 8 quân hậu Procedure. 6. Nối danh sách l2 vào cuối danh sách l1; Procedure noids(var l1:tronut;l2:tronut); Var p:tronut; Begin If l1=nil then l1:=l2; Else Begin P:=l1; While p^.link<>nil do P:=p^.link;

Ngày đăng: 07/02/2015, 19:00

TỪ KHÓA LIÊN QUAN

w