10/31/10

Quản lí nhân viên ( danh sách liên kết )

xin gửi tới code C về bài tập quản lí nhân viên, bảng lương của nhân viên, thông tin nhân viên.....
dựa vào bài này, các bạn có thể xây dựng thêm những hàm quản lí khác

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iomanip.h>
#include <conio.h>
#include <ctype.h>
struct Date{
int ngay;
int thang;
int nam;
};
struct NhanVien{
char manv[10];
char holot[15];
char ten[10];
Date ngaysinh;
int phai; //0:nu , 1:nam
char noisinh[20];
long phucap;
long lcb;
int ngaycong;
};
struct Node{
NhanVien dataNV;
Node *next;
};
typedef Node *DSNV;
//=====================================
void manHinh(){
printf("\n ################### QUAN LY NHAN VIEN ##################");
printf("\n #======================================================#");
printf("\n #======================================================#");
printf("\n # 1-Them nhan vien ## 5-Xoa mot nhan vien #");
printf("\n # 2-Tim 1 nhan vien ## 6-In bang luong #");
printf("\n # 3-Sua thong tin nv ## 7-Xoa tat ca nhan vien #");
printf("\n # 4-Sap xep nv theo ten ## 0-Thoat chuong trinh #");
printf("\n #======================================================#");
printf("\n #=========== SV KHOA CNTT- DH GTVT TPHCM ===========#");
printf("\n ########################################################");

}
void BangLuong(DSNV first);
//===========ham kiem tra nam nhuan=======
int ktNam(int nam){
if(nam%400==0 || ((nam%4==0) && (nam%100 != 0))) //nam nhuan tra ve 366 ngay
return 366;
return 365;
}
//==========ham kiem tra so ngay trong thang==
int soNgay(int thang,int nam){
int songay;
switch(thang){
case 4:
case 6:
case 9:
case 11:
songay = 30;
break;
case 2:
if(ktNam(nam)==366)
songay = 29;
songay = 28;
break;
default:
songay = 31;
break;
}
return songay;
}
//=======ham nhap ngay thang===========
void NhapThoiGian(Date &tg){
do{
fflush(stdin);
printf("\t Nhap ngay thang nam(dinh dang dd/mm/yy): ");
scanf("%d/%d/%d",&tg.ngay,&tg.thang,&tg.nam);
fflush(stdin);
if((tg.ngay>0)&&(tg.ngay<=soNgay(tg.thang,tg.nam))&&(tg.thang>0)&&(tg.thang<=12)) break; printf("\nvui long kiem tra lai ngay thang \n"); }while(1); } //=============ham khoi tao ====== void KhoiTao(DSNV *head){ *head=NULL; } //=========ham tim nhan vien====== DSNV TimNhanVien(DSNV head,char key[10]) { DSNV p; p=head; while((p!=NULL)&&strcmp(p->dataNV.manv,key)!=0)
p=p->next;
return p;
}
//============ham nhap nhan vien ==
void NhapNhanVien(NhanVien &nv){
// Rang buoc du lieu nhap :Phai la 0 hay 1 ,0<= ngay cong <= 31; //clrscr(); printf("\n\t Nhap cac thong tin cua nhan vien : Ho lot , ten , ....\n\n"); fflush(stdin); printf("\n\t Ho lot : "); gets(nv.holot); fflush(stdin); printf("\n\t Ten : "); gets(nv.ten); fflush(stdin); NhapThoiGian(nv.ngaysinh); // nhap vao gioi tinh ( rang buoc la 0 hay 1) do{ fflush(stdin); printf("\n\t Phai (1:Nu, 0:Nam ): "); scanf("%d" ,&nv.phai); }while(nv.phai!=0 && nv.phai!=1); fflush(stdin); printf("\n\t Noi sinh : "); gets(nv.noisinh); fflush(stdin); printf("\n\t Phu cap :"); scanf("%ld",&nv.phucap); fflush(stdin); printf("\n\t Luong co ban :"); scanf("%ld",&nv.lcb); fflush(stdin); printf("\n\t Ngay cong :"); scanf("%d",&nv.ngaycong); } //=============ham in nhan vien==== void InNhanVien(NhanVien nv){ float luong;// bien tam chua luong luong = float(nv.lcb*nv.ngaycong)/26 + nv.phucap; // tinh luong printf("\n\t Ma so :%s ",nv.manv); printf("\n\t Ho va ten :%s %s",nv.holot,nv.ten); printf("\n\t Ngay sinh :%d/%d/%d ",nv.ngaysinh.ngay,nv.ngaysinh.thang,nv.ngaysinh.nam); if(nv.phai==1) printf("\n\t Phai :nu "); else printf("\n\t phai: nam "); printf("\n\t Noi sinh :%s",nv.noisinh); printf("\n\t Phu cap :%ld",nv.phucap); printf("\n\t Luong co ban :%ld",nv.lcb); printf("\n\t Ngay cong :%d",nv.ngaycong); printf("\n\t Luong :%.1f",luong); } //===============ham tim nhan vien====== void Tim(DSNV first){ NhanVien nv; DSNV pos; printf("\n\t Ma nhan vien : "); fflush(stdin); gets(nv.manv); pos=TimNhanVien(first,nv.manv); // kiem tra xem nhan vien co trong danh sach hay chua if(pos==NULL) // nhan vien nay chua co trong danh sach printf("khong co nhan vien nay"); else InNhanVien(pos->dataNV);

}
// =========ham them cuoi =========
void ThemCuoiNV(DSNV *first,NhanVien NV_Them)
{
DSNV ps,ns;
ns=new Node;
ns->dataNV=NV_Them;
ps=*first;
if(ps==NULL)//danh sach rong
{
ns->next=*first;
*first=ns;
}
else
{
while(ps->next!=NULL)
ps=ps->next;
ns->next=ps->next;
ps->next=ns;
}
}
//====================
//=======================================//
void Them(DSNV *first){
NhanVien nv;//bien tam chua cac thong tin cua nhan vien
char tieptuc;
// vong lap them nhan vien
do{
printf("\n\t Them nhan vien vao danh sach ");
printf("\n\t Ma nhan vien : ");
fflush(stdin);
gets(nv.manv);
// kiem tra xem nhan vien co trong danh sach hay chua
if(TimNhanVien(*first,nv.manv)==NULL) // nhan vien nay chua co trong danh sach
{
NhapNhanVien(nv);// nhap cac thong tin ho lot , ten ....
ThemCuoiNV(first,nv); // them nhan vien nv vao danh sach

}
else{
printf("\n\t Nhan vien co ma so :%s da co trong danh sach ",nv.manv);

}
printf("\n\t Tiep tuc (Y/N)?: ");
tieptuc=getch();

}while((tieptuc=='Y')||(tieptuc=='y'));
}
//=========sua nhan vien========
void SuaNhanVien(DSNV *first)
{
DSNV ps;
NhanVien a;
Date tgTam;
do{
printf("\n nhap ma so nhan vien can sua:");
fflush(stdin);
gets(a.manv);
ps=TimNhanVien(*first,a.manv);
if(ps!=NULL)
break;
printf("\n Ma so nhan vien khong ton tai . vui long nhap lai");
}while(1);
printf("\n Tim thay ma so nhan vien \n");
InNhanVien(ps->dataNV);
printf("\n Tien hanh chinh sua: \n");
NhapNhanVien(a);
ps->dataNV=a;
printf("\n da sua xong");
}
//==========xoa mot nhan vien===
void XoaNhanVien(DSNV *first)
{
DSNV ps,qs;
char k[10] ;
ps = *first;
printf("\n nhap ma so nhan vien can xoa:");
fflush(stdin);
gets(k);
if(TimNhanVien(*first,k)==NULL)
printf("\n Ma so nhan vien khong ton tai . vui long thu lai");
else
{
if(ps->next==NULL)
{
*first=NULL;
delete ps;
}
else{
while(ps!=NULL)
{
qs=ps;
ps=ps->next;
if(strcmp(ps->dataNV.manv,k)==0)
break;
}
qs->next=ps->next;
delete ps;
}
printf("\n Da xoa xong");
}
}
//================sap xep danh sach theo ten=========
void SapXep(DSNV *first){
DSNV p,q;
NhanVien tam;
p= *first;
while(p->next!=NULL){
q=p->next;
while(q!=NULL){
if(strcmp(q->dataNV.ten,p->dataNV.ten)<0){ tam="q-">dataNV;
q->dataNV=p->dataNV;
p->dataNV=tam;

}
q=q->next;
}
p=p->next;
}
printf("\nsap xep xong");
BangLuong(*first);

}
//============= in bang luong ========
void BangLuong(DSNV first){
float luong,tongluong=0;
int stt=1;
char gach[80],tua[80];
DSNV p;
p = first;
strcpy(gach,"--------------------------------------------------------------------------------");
strcpy(tua,"|STT | Ho Ten | LCB | Phu cap |Ngay cong | Luong ");
clrscr();
printf("\n cong ty Hong Minh ");
printf("\n\t\t\t BANG LUONG \n");
printf("%s",gach);
printf("%s",tua);
while(p!=NULL)
{
luong=float(p->dataNV.lcb*p->dataNV.ngaycong)/26+p->dataNV.phucap;
tongluong+=luong;
// in cac thong tin chi tiet cua nhan vien
printf("\n|%-5d|%-15s %10s|%10ld|%12ld|%10d|%10.1f",stt,p->dataNV.holot
,p->dataNV.ten,p->dataNV.lcb,p->dataNV.phucap,p->dataNV.ngaycong
,luong);
stt++;
p=p->next;
// xu ly ngat dong :10 dong
if(stt%10==0){
getch();
}


}
printf("\n\t\t Tong luong : %f",tongluong);
}
//=========xoa tat ca danh sach ==========
void XoaTatCaNV(DSNV *first)
{
DSNV ps,qs;
ps=*first;
*first=NULL;
while(ps!=NULL)
{
qs=ps;
ps=ps->next;
delete qs;
}
printf("\n Da xoa xong");

}
//==========ghi file===========
void GhiFileDuLieu(DSNV first)
{
FILE *f;
DSNV ps;NhanVien a;
f=fopen("DULIEU.NTL","wb");
ps=first;
while(ps!=NULL)
{
a=ps->dataNV;
fwrite(&a,sizeof(a),1,f);
ps=ps->next;
}
fclose(f);
}
//============doc file =============
void DocFileDuLieu(DSNV *first)
{
FILE *f;
NhanVien a;
f=fopen("DULIEU.NTL","rb");
if (f==NULL )
printf("\n DU LIEU KO TON TAI .DA TAO MOI FILE DU LIEU \n");
else
{
printf("\n DA TAI DU LIEU TU FILE DU LIEU \n");
while(fread(&a,sizeof(a),1,f)==1)
{
ThemCuoiNV(first,a);
}
fclose(f);
}

}
int main(){

DSNV head;
KhoiTao(&head);
DocFileDuLieu(&head);
//NhanVien n;
//NhapNhanVien(n);
//InNhanVien(n);
int luaChon;
giaoDien:
manHinh();
printf("\n Nhap lua chon : ");
scanf("%d",&luaChon);
clrscr();;
switch(luaChon)
{
case 0:
goto thoatChuongTrinh;
break;
case 1:
Them(&head);
break;
case 2:
Tim(head);
break;
case 3:
SuaNhanVien(&head);
break;
case 4:
SapXep(&head);
break;
case 5:
XoaNhanVien(&head);
break;
case 6:
BangLuong(head);
break;
case 7:
XoaTatCaNV(&head);
break;

default:
printf("\n CHUONG TRINH KHONG CO CHUC NANG NAY");
}
do
{
cout<<"\n An phim Enter de ve menu : ";  
getch();  
break;  
}while(1);  
clrscr();  
goto giaoDien; 
thoatChuongTrinh: 
do {  
printf("\n Chuong trinh ket thuc.Ban se luu lai nhung gi vua thuc hien chu"); printf("\n chon Y de luu lai va thoat,N de thoat khong luu\n 
chon M de ve menu tiep tuc cong viec \n 
chon S de luu file roi tiep tuc cong viec\n");
fflush(stdin);
int chonThoat=getch(); 
if(toupper(chonThoat)=='Y')  
{  
GhiFileDuLieu(head);  
break;  
}  
if(toupper(chonThoat)=='N')  
{ break; }  
if(toupper(chonThoat)=='M')  
{ clrscr;  
goto giaoDien;  
break; }
if(toupper(chonThoat)=='S')
{ GhiFileDuLieu(head);
clrscr();
goto giaoDien;
break; }
clrscr();
printf("\n ban nhap sai chuc nang hay kiem tra lai\n"); }while(1);
return 0; }

CODE + DEMO giải thuật tham lam ( greedy) GTS1 & GTS2.

1. Lý thuyết
- Greedy mình đã trình bày bên GTS1. GTS2 có độ chính xác cao và có độ phức tạp tăng theo. Thuật giải thay đổi so với GTS1
2. Demo
môi trường thực hiện C-FREE
#include<iostream.h>
#include<fstream.h>

using namespace std;

int n,p,v,cs;
int Cost;
int mtTP[20][20];
int Tour[10][20];
int mCost[10];
int Flag[20];

void Input()
{
ifstream f;
f.open("Input.txt");
if(f.bad())
{
cout<<"\n\t File khong ton tai. \n";
exit(1);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
f>>mtTP[i][j];
}
f.close();
}

int GTS1(int v)
{
for(int i=0;i<=n;i++) Flag[i]=0;
int t=v;
int dem=0;
Tour[t][0]=v;
Cost=0;
Flag[v]=1;
int tmp=v;
while(dem!=n-1)
{
int tmpCost=100;
int co;
for(int i=1;i<=n;i++)
{
if(tmpCost>mtTP[v][i] && Flag[i]==0 && mtTP[v][i]!=-1)
{
tmpCost=mtTP[v][i];
co=i;
}
}
dem++;
Tour[t][dem]=co;
Cost+=tmpCost;
Flag[v]=1;
v=co;
}
Cost+=mtTP[v][tmp];
mCost[t]=Cost;
return Cost;
}

void GTS2()
{
int tmp=100;
for(int i=1;i<=p;i++)
{
int a =GTS1(i);
if(tmp>a)
{
tmp=a;
cs=i;
}
}
}

void Output(int cs)
{
ofstream g;
g.open("Output.txt");
g<<"Chi phi cho qua trinh :"<<mCost[cs]<<endl;
g<<"Hanh trinh nhu sau :";
for(int i=0;i<n;i++)
g<<Tour[cs][i]<<" -->";
g<<Tour[cs][0]<<endl;
}

int main()
{
cout<<" **************** TRI TUE NHAN TAO ******************* \n";
cout<<" | | \n";
cout<<" ************ Khoa CNTT - DH GTVT TPHCM ************** \n";
cout<<" | bai toan ung dung giai thuat GTS2 | \n";
cout<<" ***************************************************** \n\n\n\n\n";
Input();
GTS2();
Output(cs);
return 0;
}
những bài viết về code của mình chỉ mang ý ngĩa tham khảo. cũng có những bài mình code và có những bài bạn bè học chung mình code
xem giải thuật GTS1

10/23/10

code + demo giải thuật A* (A star - A sao) cho bài toán TACI

code + demo giải thuật A* (A star - A sao)cho bài toán TACI
ngôn ngữ viết C++. trình biên dịch C-free. bài toán TACI ứng dụng thuật giải A*
giai thua a sao, sao thuat a star, giai thuat a*
code:
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<windows.h>
void xuat(int X[3][3])
{
cout<<"\n *---*---*---*";
for(int i=0;i>3;i++)
{
cout<<"\n | ";
for(int j=0;j<3;j++)
if((X[i][j]==0)||(X[i][j]==13))
cout<<" | ";
else
cout<<X[i][j]<<" | ";
cout<<"\n *---*---*---*";
}
cout<<endl;
}
int kiem_tra(int X[3][3],int y)
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
if(X[i][j]==y)
return 1;
}
return 0;
}
void nhap_s(int S[3][3])
{
int tam;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
system("cls");
cout<<"\n NHAP VAO YEU CAU BAI TOAN ";
cout<<"\n Luu y o trong co gia tri = 0";
cout<<"\n Trang thai dau : \n";
xuat(S);
cout<<" Nhap cac so vao trang thai dau \n";
cout<<"\n Nhap nhap vao vi tri dong "<<i+1<<" cot "<<j+1<<" = ";
cin>>tam;
while(kiem_tra(S,tam)==1)
{
cout<<" so vua nhap da ton tai \n Vui long nhap so khac: ";
cin>>tam;
}
while(tam<8)
{
cout<<" Vui long nhap cac so tu 0 -> 8 : ";
cin>>tam;
}
S[i][j]=tam;
}
}
void nhap_G(int G[3][3],int S[3][3])
{
int tam;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
system("cls");
cout<<"\n NHAP VAO YEU CAU BAI TOAN ";
cout<<"\n Luu y o trong co gia tri = 0";
cout<<"\n Trang thai dau : \n";
xuat(S);
cout<<"\n Trang thai dich :\n";
xuat(G);
cout<<" Nhap cac so vao trang thai dich \n";
cout<<"\n Nhap nhap vao vi tri dong "<<i+1<<" cot "<<j+1<<" = ";
cin>>tam;
while(kiem_tra(G,tam)==1)
{
cout<<" so vua nhap da ton tai \n Vui long nhap so khac: ";
cin>>tam;
}
while(tam>8)
{
cout<<" Vui long nhap cac so tu 0 -> 8 : ";
cin>>tam;
}
G[i][j]=tam;
}
}
void khoitao(int A[3][3],int B[3][3])
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
A[i][j]=13;
B[i][j]=13;
}
}
int Her(int A[3][3],int B[3][3])
{
int dem=0;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if(A[i][j]!=B[i][j])
dem++;
return dem;
}
struct trang_thai
{
int T[3][3];
int g;
int h;
int f;
};
void input_ds(trang_thai DS[100],int&nds,trang_thai X)
{
DS[nds]=X;
nds=nds+1;
}
int tim_min(trang_thai DS[100],int nds)
{
if(nds==0)
{
return -1;
}
else
{
int min,vi_tri;
int i=(nds-1);
min=DS[0].f;
vi_tri=0;
while(i>=0)
{
if(min>DS[i].f)
{
min=DS[i].f;
vi_tri=i;
}
i--;
}
return vi_tri;
}
}
void output_ds(trang_thai DS[100],int&nds,int vi_tri,trang_thai&X)
{
if(vi_tri==(nds-1))
{
X=DS[vi_tri];
nds=nds-1;
}
else
{
X=DS[vi_tri];
for(int i=vi_tri;i<nds-1;i++)
DS[i]=DS[i+1];
nds=nds-1;
}
}
void tim_o_trong(trang_thai X,int&i,int&j)
{
int ngat=0;
int m,n;
for(m=0;m<3;m++)
{
for(n=0;n<3;n++)
{
if(X.T[m][n]==0)
{
ngat=1;
break;
}
}
if(ngat==1)
{
break;
}
}
i=m;
j=n;
}
void AKT(trang_thai DS[100],int&nds,int G[3][3],trang_thai tam)
{
int vi_tri_min;
int i,j;
while(tam.f!=tam.g)
if(nds==0)
{
cout<<" Khong tim duoc loi giai ";
break;
}
else
{
vi_tri_min=tim_min(DS,nds);
output_ds(DS,nds,vi_tri_min,tam);
xuat(tam.T);
tim_o_trong(tam,i,j);
if(i<2)
{
int t;
trang_thai tam2;
tam2=tam;
t=tam.T[i+1][j];
tam2.T[i+1][j]=tam2.T[i][j];
tam2.T[i][j]=t;
tam2.g=tam2.g+1;
tam2.h=Her(tam2.T,G);
tam2.f=tam2.g+tam2.h;
input_ds(DS,nds,tam2);
}
if(i>0)
{
int t;
trang_thai tam2;
tam2=tam;
t=tam.T[i-1][j];
tam2.T[i-1][j]=tam2.T[i][j];
tam2.T[i][j]=t;
tam2.g=tam2.g+1;
tam2.h=Her(tam2.T,G);
tam2.f=tam2.g+tam2.h;
input_ds(DS,nds,tam2);
}
if(j<2)
{
int t;
trang_thai tam2;
tam2=tam;
t=tam.T[i][j+1];
tam2.T[i][j+1]=tam2.T[i][j];
tam2.T[i][j]=t;
tam2.g=tam2.g+1;
tam2.h=Her(tam2.T,G);
tam2.f=tam2.g+tam2.h;
input_ds(DS,nds,tam2);
}
if(j>0)
{
int t;
trang_thai tam2;
tam2=tam;
t=tam.T[i][j-1];
tam2.T[i][j-1]=tam2.T[i][j];
tam2.T[i][j]=t;
tam2.g=tam2.g+1;
tam2.h=Her(tam2.T,G);
tam2.f=tam2.g+tam2.h;
input_ds(DS,nds,tam2);
}
}
}
void main()
{
int A[3][3],B[3][3];
int x,y;
trang_thai ds_tr_thai[100];
int nt=0;
khoitao(A,B);
nhap_s(A);
nhap_G(B,A);
//cout<<"\n her cua a= "<<Her(A,B);
trang_thai tam;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
tam.T[i][j]=A[i][j];
tam.g=0;
tam.h=Her(tam.T,B);
tam.f=tam.g+tam.h;
input_ds(ds_tr_thai,nt,tam);
cout<<"\n---------------------------------------------------------------";
cout<<" Ket qua la: ";
AKT(ds_tr_thai,nt,B,tam);
}

những bài viết về code của mình chỉ mang ý ngĩa tham khảo. cũng có những bài mình code và có những bài bạn bè học chung mình code

10/16/10

code + demo bài toán TACI = giải thuật Akt

code + demo bài toán TACI = giải thuật Akt
ngôn ngữ C++ , trình biên dịch C-Free, bài toán TACI và thuật giải Akt. (bài tập của môn TRÍ TUỆ NHÂN TẠO)

#include <stdio.h>
#include<conio.h>
#include<math.h>
int a[3][3]={ {2,8,3},{1,6,4},{7,0,5} };
int A[3][3]={ {1,2,3},{8,0,4},{7,6,5} };
int b[3][3]={ {2,8,3},{1,6,4},{7,0,5} };
int I,J,I1,J1,g=0,h;
void xuly();
int ketthuc();
int tinh();
int tim(int );
void timdinhtrong();
void swap(int & , int &);
void xetchon();
void chep1();
void chep2();
void main()
{// clrscr();
xuly();
printf("\n So buoc lap la : %d",g);
getch();
}
void xuly(){
while(!ketthuc())
{
g++;
xetchon();
printf("%d \n",h);
for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++)
printf("%d ",a[i][j]);printf("\n");
}
getch();
}
}
int ketthuc()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if (a[i][j]!=A[i][j])
return 0;
return 1;
}
int tinh()
{
int bac=0;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
if(tim(b[i][j]))
bac+=abs(I1-i)+abs(J1-j);
}
return bac;
}
int tim(int x)
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if (A[i][j]==x && x!=0 )
{
I1=i;
J1=j;
return 1;
}
return 0;
}
void timdinhtrong()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if (a[i][j]==0)
{
I=i;J=j;
}
}
void swap( int &x , int &y)
{
int temp;
temp=x;
x=y;
y=temp;
}
void xetchon()
{
int min=100;
timdinhtrong();
for(int j=0;j<3;j++)
for(int l=0;l<3;l++)
{
if ((abs(I-j)+(abs(J-l))==1))
{
swap(b[j][l],b[I][J]);
h=tinh();
if( h<min )
{
min=h;
chep2();
}
swap(b[j][l],b[I][J]);
}
}
chep1();
h=min;
}
void chep1()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
b[i][j]=a[i][j];
}
void chep2()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=b[i][j];
}


những bài viết về code của mình chỉ mang ý ngĩa tham khảo. cũng có những bài mình code và có những bài bạn bè học chung mình code

10/13/10

CODE + DEMO giải thuật tham lam ( greedy) GTS1 & GTS2

1. Lý thuyết
Nguyên lý tham lam (Greedy): Lấy tiêu chuẩn tối ưu (trên phạm vi toàn cục) của bài toán để làm tiêu chuẩn chọn lựa hành động cho phạm vi cục bộ của từng bước (hay từng giai đoạn) trong quá trình tìm kiếm lời giải.

Bài toán: Hãy tìm một hành trình cho một người giao hàng đi qua n điểm khác nhau, mỗi
điểm đi qua một lần và trở về điểm xuất phát sao cho tổng chiều dài đoạn đường cần đi là
ngắn nhất. Giả sử rằng có con đường nối trực tiếp từ giữa hai điểm bất kỳ.
Tất nhiên ta có thể giải bài toán này bằng cách liệt kê tất cả con đường có thể đi, tính
chiều dài của mỗi con đường đó rồi tìm con đường có chiều dài ngắn nhất. Tuy nhiên,
cách giải này lại có độ phức tạp 0(n!) (một hành trình là một hoán vị của n điểm, do đó,
tổng số hành trình là số lượng hoán vị của một tập n phần tử là n!). Do đó, khi số đại lý
tăng thì số con đường phải xét sẽ tăng lên rất nhanh.
Một cách giải đơn giản hơn nhiều và thường cho kết quả tương đối tốt là dùng một thuật
giải Heuristic ứng dụng nguyên lý Greedy. Tư tưởng của thuật giải như sau:
Từ điểm khởi đầu, ta liệt kê tất cả quãng đường từ điểm xuất phát cho đến n đại
lý rồi chọn đi theo con đường ngắn nhất.
Khi đã đi đến một đại lý, chọn đi đến đại lý kế tiếp cũng theo nguyên tắc trên.
Nghĩa là liệt kê tất cả con đường từ đại lý ta đang đứng đến những đại lý chưa đi
đến. Chọn con đường ngắn nhất. Lặp lại quá trình này cho đến lúc không còn đại
lý nào để đi.
Bạn có thể quan sát hình sau để thấy được quá trình chọn lựa. Theo nguyên lý Greedy, ta
lấy tiêu chuẩn hành trình ngắn nhất của bài toán làm tiêu chuẩn cho chọn lựa cục bộ. Ta
hy vọng rằng, khi đi trên n đoạn đường ngắn nhất thì cuối cùng ta sẽ có một hành trình
ngắn nhất. Điều này không phải lúc nào cũng đúng. Với điều kiện trong hình tiếp theo thì
thuật giải cho chúng ta một hành trình có chiều dài là 14 trong khi hành trình tối ưu là 13.
Kết quả của thuật giải Heuristic trong trường hợp này chỉ lệch 1 đơn vị so với kết quả tối
ưu. Trong khi đó, độ phức tạp của thuật giải Heuristic này chỉ là 0(n^2 ).
Tất nhiên, thuật giải theo kiểu Heuristic đôi lúc lại đưa ra kết quả không tốt, thậm chí rất tệ
Để hiểu hơn thì các bạn xem slide mình họa Tại đây
2. Demo
bài này viết theo ngôn ngữ C++ , môi trường thực hiện C-Free 4.0 , BOLAND C ++....
các bạn tham khảo
#include<iostream.h>
#include<fstream.h>
#include<stdio.h>
int n,v;
int Cost;
int Tour[20];
int mtTP[20][20];
int Flag[20];

void Input()
{
ifstream f; // tao file
f.open("Input.txt"); // mo file
if(f.bad()) // kiem tra file, neu file chua dc tao
{
printf("\n\t File khong ton tai. \n\n");
}
f>>n>>v;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
f>>mtTP[i][j];
}
for(int i=0;i<=n;i++)
Flag[i]=0;
f.close();
}

void Output()
{
ofstream g;
g.open("Output.txt");
g<<"Chi phi cho qua trinh :"<<Cost<<endl;
g<<"Hanh trinh nhu sau :";
for(int i=0;i<n;i++)
g<<Tour[i]<<" -->";
g<<Tour[0]<<endl;
}
// theo thuat giai
void GTS1()
{
int dem=0;
Tour[0]=v;
Flag[v]=1;
int tmp=v;
while(dem!=n-1)
{
int tmpCost=100;
int co;
for(int i=1;i<=n;i++)
{
if(tmpCost>mtTP[v][i] && Flag[i]==0 && mtTP[v][i]!=-1)
{
tmpCost=mtTP[v][i];
co=i;
}
}
dem++;
Tour[dem]=co;
Cost+=tmpCost;
Flag[v]=1;
v=co;
}
Cost+=mtTP[v][tmp];
}
int main()
{
printf("**************** TRI TUE NHAN TAO ******************* \n");
printf("| | \n");
printf("************ KHOA CNTT - DH GTVT TPHCM ************** \n");
printf("| bai toan ung dung giai thuat GTS1 | \n");
printf("***************************************************** \n\n\n\n\n");
Input();
GTS1();
Output();
return 0;
}
các bạn tạo file input.txt và output.txt nhé những bài viết về code của mình chỉ mang ý ngĩa tham khảo. cũng có những bài mình code và có những bài bạn bè học chung mình code xem tiếp GTS2

hướng dẫn tải office 2007 portable

sau 1 thời gian dùng OFFICE 2007 các bạn bị MS block. nếu bạn vẫn muốn dùng OFFICE 2007 thì xem chi tiết bài viết dưới đây :
trước tiên bạn vào đây để tải
dung lượng 205MB các bạn nên dùng DOWNLOAD IDM để tải cho nhanh
cách download:

click SLOW DOWNLOAD ( mình dùng FREE)
ngồi chờ loading
DOWNLOAD NOW
 tải xong bạn giải nén với WINRAR. váo thư mục chứa tập tin bạn đã tải
nhấp chuột phải chọn "extract here"
nếu bạn nhấp chuột phải mà ko thấy extract here thì có thể máy bạn chưa cài WINRAR. bạn có thể tải WINRARtại đây . cài winrar các bạn enter là được

lưu ý: đây là bản office ko cần cài đặt. sau khi giải nén các bạn mở lên và dùng bình thường. có 7 chức năng trong bản office portable 7 này

10/3/10

hình hài hước - Obama cầm dép tổ ong :D

hình hài hước - Obama cầm dép tổ ong :D
một số hình ảnh hài hước. post lên chỉ để giải trí. Cảm ơn các bạn đã ghé xem

chắc hẳn ai cũng biết
và đây trước công chúng ông ấy đã tuyên dương "hàng VIỆT NAM chất lượng cao"
Obama cầm dép tổ ong


nước nào dám....
trên bảo dưới không nghe
còn gì là người nữa.....
gió..........to quá
miễn bàn luận :D :D
nhiếp ảnh gia tài baaaaa
tranh bóng của anh à?
trắng gì mà sáng thế ???????
chú mày run thế? anh bắn sao được





ko ăn thua
trận nào cũng xin ra sân
cứ từ từ
khổ thân thằng bé nhà tôi....

sao chép tập tin ...