You are on page 1of 19

Trng i Hc Bch Khoa H Ni

Vin in T Vin Thng


======o0o======



MISSION1- PROJECT1
CHNG TRNH C GHI FILE BIU DIN
TH .DOT


Ging vin hng dn : TS. Nguyn c Minh
Nhm thc hin :
Nguyn Vn Lm 20111714
Nguyn Vn Mnh 20111835
L Vn Phong 20112645
Phng Tn Cng 20111233
Ng Trung Kin 20111719
H Ni, 4/2014



1
Mc lc:

1. Gii thiu chng trnh..2
a) Tng quan...2
b) Nghin cu cc phng php c..2
2. Ci t h thng.4
a) H iu hnh Ubuntu OS (suse).4
b) Ci dt gcc, g++5
c) Ci t emacs6
3. L thuyt.7
a) n li lp trnh hng i tng c++7
b) Makefile..7
4. Thit k9
a) Xy dng cu trc d liu...9
i. Lp lu node
ii. Lp lu cnh
iii. D liu cnh ni
b) Thut ton ghi file
c) Thut ton c file
5. Thut ton BFS v DFS..15



2
1. Gii thiu chng trnh
a) Tng quan:
Chng trnh c ghi file biu din th .dot



Kch bn s dng:
- Ghi file: nhp thng tin th, s node, thuc tnh node, s cnh, thuc tnh cnh...,
chng trnh x l lu vo cu trc d liu sau xut ra file .dot.
- c file: vi u vo file .dot, chng trnh x l file v xut ra file nh.
b) Cc chng trnh c:
GVEdit




3

Kgraphviewer:


Xdot




4
2. Ci t h thng
a) H iu hnh Ubuntu( hoc suse)
Ci t ubuntu bng wubi l n gin v thun tin cho vic s dng nht do c
th dng song song vi h iu hnh khc.
Truy nhp http://www.ubuntu.com/download/desktop
Chn bn ph hp vi cu hnh:

Sau khi ti v v bt u ci t

Chn install inside windows, tip tc ci thit t thng s ri ci bnh thng.



5


b) Ci t gcc g++
Gcc l GNU C Compiler( trnh dch C ca GNU) l 1 tp hp cc trnh dch c
thit k cho nhiu ngn ng lp trnh khc nhau. Gcc l trnh dch chnh thc ca h
thng GNU v c hu ht h iu hnh ging Unix, bao gm Linux, dng h iu hnh
BSD v Mac os x chn lm trnh dch tiu chun. Gcc tng thch vi nhiu nn tng
kin trc my tnh a dng, c s dng rng ri nh 1 coongn c lm mi trng pht
trin cc phn mm thng mi.
Kim tra phin bn gcc: m terminal bng t hp Ctrl+ Alt+ t, g gcc -v


Tip tc kim tra g++: g g++ -v



6


c) Ci t emacs
Emacs l trnh son tho vn bn a chc nng. y l phn mm m ngun m(
phn mm t do), chy c trn nhiu h iu hnh v c th m rng thm vo chc
nng mi. Emacs ph bin trong gii lp trnh my tnh v ngi dng my tnh thng
tho k thut.




7
3. L thuyt.
a) n li lp trnh hng i tng c++.

C++ l 1 loi ngn ng lp trnh. y l 1 dng ngn ng a mu hnh t do
c kiu tnh v h tr lp trnh th tc, d liu tru tng, lp trnh hng i
tng, v lp trnh a hnh.
C 3 c trng:

1. S ng Gi
L s lien kt cc hm (phng thc ) trong c s lien kt cu trc d
liu thao tc d liu. S ng gi ny trong C++ cng nh mt s ngn
ng lp trnh hng i tng khc c thc hin bng kiu d liu mi.
l kiu lp.

2. S Tha K
Cho php chng ta c tha hng nhng lp c, ging nh chng ta
c th tha hng nhng g cha m li, chng ta cng c th to them
nhng tnh cht mi cho cc lp c s dng. Trong C++ nhng lp
c trc c gi l lp c s, nhng lp m rng c gi l lp dn
xut.

3. S a Hnh
C th hiu l chng ta c th gn mt tn hoc mt k hiu cho mt hm (
phng thc ) v tn ny c th dng cho ton th h nu nh hm (
phng thc ) ny c th p dng c.

b) Makefile
1. Gii thiu v Makefile
Tin ch make xem xt mt cch t ng nhng phn trong mt chng
trnh ln cn c bin dich, v a ra nhng command tin hnh bin
dch li chng. y, chng ta ni n GNU make, m c thc hin



8
bi Richard Stallman v Roland MccGrath. S pht trin k t version
3.76 c thc hin bi Paul D. Smith.
V d ca chng ta ch ra mt chng trnh C, bi l chng l ph bin,
nhng bn c th s dng make bt k ngn ng no m compiler c
th chy vi shell command. Thc vy, make khng gii hn ti cc ngn
ng, Bn c th s dng n miu t bt k cng vic no ni m mt s
file phi c cp nht t ng t bt k s thay i no.
chun b cho vic s dng make, bn phi vit mt file gi l makefile
m miu t mi quan h gia cc files trong chng trnh v cung cp cc
command (lnh) cho vic cp nht mi file. Trong mt chng trnh,
thng thng , file c th chy c c cp nht t cc object files, m
c to ra bi bin dch cc files chng trnh ngun.

2. Khi nim
Makefile l mt file c nh ng c bit s dng to ra mt kch bn
bin i chng trnh m ngun thnh cc chng trnh chy c
(executable program). Kt hp vi tin ch make ca GNU gip chng ta
qun l project mt cch d dng.

3. Cch chy Makefile
- c th chy makefile s dng command sau trong Ternimal
Make
- Chng trnh s tm kim trong th mc hin ti mt file c tn t
ng l makefile or Makefile. Trong trng hp bn mun ch r s gi
mt file vi tn khc v d my_makefile, s dng ty chn f
make f my_makefile
Kt qu chy makefile s tr v 1 trong 3 gi tr
0 nu nh thnh cng
2 nu nh c li
1 nu nh bn s dng ty chn q thng bo l file cha c cp
nht



9
4. Thit k
a) Cu trc d liu


Code chng trnh ghi file dot

#include<iostream>
using namespace std;
#include<string.h>
#include<stdio.h>
#include<fstream>
const int SIZE=15;

//cau truc node
typedef struct{
char name[15]; // ten node
char shape[15]; // hinh dang: spare, triangle, diamond...
char style[10]; // filled, bold
char color[10]; // mau sac: green, red, yellow, pink...
char label[100]; // noi dung node
}NODE;
int set_node(NODE &node,char _name[15],char _shape[15],char _style[10],char
_color[10],char _label[100]){
strcpy(node.name,_name);
strcpy(node.shape,_shape);
strcpy(node.style,_style);
strcpy(node.color,_color);
strcpy(node.label,_label);
return 0;
}




10
// ham nhap node
int nhap_node(NODE& node, int i){
char _shape[15]; // hinh dang: spare, triangle, diamond...
char _style[10]; // filled, bold
char _color[10]; // mau sac: green, red, yellow, pink...
char _label[100]; // noi dung node
char _name[15];
cout<<"Nhap ten node "<<i<<": ";
cin>>_name;
cout<<"Nhap hinh dang node "<<i<<"(spare, triangle, box, circle...): ";
cin>>_shape;
cout<<"Nhap style cua node "<<i<<"(filled/bold): ";
cin>>_style;
cout<<"Nhap mau sac cua node "<<i<<" (green,blue,red...): ";
cin>>_color;
cout<<"Nhap noi dung cua node "<<i<<": ";
cin>>_label;
set_node(node,_name,_shape,_style,_color,_label);
return 0;
}

// cau truc thong tin canh
typedef struct {
char nodedau[15];
char nodesau[15];
char kieu[10];
char dulieu[100];
char mau[10];
}CANH;

// ham nhap thong tin canh
int nhap_canh(CANH& _canh){



11
cout<<"+Nhap node dau: ";
fflush(stdin);
gets(_canh.nodedau);
cout<<"+Nhap node sau: ";
fflush(stdin);
gets(_canh.nodesau);
cout<<"+Nhap kieu: ";
fflush(stdin);
gets(_canh.kieu);
cout<<"+Nhap mau: ";
fflush(stdin);
gets(_canh.mau);
cout<<"+Nhap du lieu tren canh noi: ";
fflush(stdin);
gets(_canh.dulieu);
return 0;
}

// thuat toan ghi file
int thuat_toan_ghi_file(char ten[30],NODE N[SIZE],CANH M[200],int _n,int _m){
//trong do N la mang chua cac NODE, M la mang chua cac canh
//_n so node, _m so canh
ofstream file(ten,ios::out);
int i;
char digraph[10];
cout<<"nhap ten digraph: ";
cin>>digraph;
file<<"digraph "<<digraph<<"{"<<endl;
for(i=1;i<=_n;i++){
file<<N[i].name<<" [";
if(N[i].style!="null") file<<",style="<<N[i].style;



12
if(N[i].shape!="null") file<<",shape="<<N[i].shape;
if(N[i].color!="null") file<<",color="<<N[i].color;
if(N[i].label!="null"){
file<<",label="";
file<<N[i].label;
file<<""";
}
file<<"];"<<endl;
}
for(i=1;i<=_m;i++){
file<<M[i].nodedau<<"->"<<M[i].nodesau<<"[";
if(M[i].kieu!="null") file<<"style="<<M[i].kieu;
if(M[i].mau!="null") file<<",color="<<M[i].mau;
if(M[i].dulieu!="null"){
file<<",label="";
file<<M[i].dulieu;
file<<""";
}
file<<"];"<<endl;
}
file<<"}";
file.close();
return 0;
}

// ham main
int main(){
NODE N[SIZE]; // list luu node
int n,i,m;
cout<<"Nhap vao so node: ";
cin>>n;



13
for(i=1;i<=n;i++) nhap_node(N[i],i);

CANH M[200]; //mang cau truc, moi phan tu la thong tin ve canh
cout<<"Nhap so luong canh: ";
cin>>m;
cout<<"Nhap thong tin canh:\n ";
for(i=1;i<=m;i++){
cout<<"canh "<<i<<":\n";
nhap_canh(M[i]);
}

//ok. let do it
char file[30];
cout<<"Nhap file .dot muon ghi: ";
cin>>file;
thuat_toan_ghi_file(file,N,M,n,m);
cin.get();
return 0;
}





14
Chy th



Sau khi chy chng trnh, ghi ra c file dot




15

Hnh m bng xdot









16
5) THUT TON DFS V BFS
a) TM KIM THEO CHIU SU (Depth First Search-DFS)
1. THUT TON
B1: Xut pht t 1 nh cho trc no
B2: X l nh ny v nh du khng x l li
B3: a tt c cc nh k vi n vo danh sch x l v chn 1 nh x l k tip
B4: Quay li bc 2 n khi khng cn nh no cha c x l th dng
..
Phn tch
S dng cu trc Stack, mng 1 chiu:
Int danh_dau[maxV]
Quy c: int danh_dau[i]=0 nh i cha c x l
Int danh_dau[i]=1 inh i c x l
2. HM
Void DFS(DOTHI g, int s) // s la dinh xuat phat
{
Int danh_dau[maxV];
Stack st;
For(i=1;i<=g.nV;i++) danh_dau[i]=0; // khoi tao, chua dinh nao duoc xet
Khoitao(st); // khoi tao stack
Push(st,s); // dua s vao stack
While(!isEmpty(st)) // khi stack chua rong
{
Int v=pop(st); //lay v ra khoi stack
If(danh_dau[i]!=1)
{
Cout<<v<< ;
Danh_dau[v]=1 ;
For(i=g.nV ;i>=1 ;i--)
If(!danh_dau[i]&&g.mtke[v][i])!=0)
Push(st,v)



17
}
}
}



b)TM KIM THEO CHIU RNG(Breadth First Search - BFS)
1.THUT TON
B1. Xut pht t 1 nh cho trc no .
B2. X l nh ny v nh du khng x l ln sau.
B3. a tt c cc nh k vi n vo danh sch x l v ln lt x l cc nh k vi
nh ang xt
B4. Quay li B2 cho n khi khng cn nh trong danh sch.

Phn tch:
Dng cu trc Queue
S dng mng nh du l mng 1 chiu:
int danhdau[maxV];
Quy c: danhdau[i] = 0; nh i cha c xt
danhdau[i] = 1; nh I c xt

2.HM
void BFS(DOTHI g, int s) // s la dinh xuat phat
{ int danhdau[maxV]; Queue q;
//Khoi tao
for (int i = 1; i<=g.nV; i++)
danhdau[i] = 0; // chua co dinh nao duoc xet
Khoitao(q); // Khoi tao Queue
// Bat dau
Push(q,s); // Dua s vao Queue
while (!isEmpty(q)) //Trong khi Queue chua rong



18
{
int v = Pop (q); // Lay v ra khoi Queue
if (danhdau[v] != 1) // Neu v chua xet
{
cout<<v<< ; danhdau[v] = 1;
for (i=1; i<=g.nV; i++)
if (!danhdau[v] && g.mtke[v][i] != 0)
Push(q,v);
}}}

You might also like