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

Đề tài: Xây dựng lớp DOTHI

  1. #1
    Ngày gia nhập
    10 2008
    Bài viết
    2

    Mặc định Xây dựng lớp DOTHI

    các huynh sửa lại cho đệ với,tại sao no chạy không dừng lại đựoc vậy,"Xay dựng lớp DOTHI và các lớp khác,tìm đường đi ngắn nhất trên đồ thi"
    C++ Code:
    1. #include<iostream.h>
    2. #include<conio.h>
    3. #include<graphics.h>
    4. #include<stdlib.h>
    5. #include<math.h>
    6. #include<stdio.h>
    7.  
    8. #define TOIDA 50
    9. #define VOCUNG 30000
    10. #define TRUE 1
    11. #define FALSE 0
    12.  
    13. /* Khai bao ma tran trong so cua do thi
    14. trongso[i][j] = VOCUNG: neu tren do thi khong co cung <i, j>
    15. trongso[i][j] != 0 : tren do thi co cung <i, j> */
    16.  
    17.  
    18.  
    19.  
    20. class NUT
    21. {
    22. private :
    23.     int x,y;
    24. public :
    25.     void nhap();
    26.     void hien();
    27.     void ve_dinh()
    28.     {
    29.     putpixel(x,y,15);
    30.     }
    31.     void ve_dt(NUT d2,int mau)
    32.     {
    33.     setcolor(mau);
    34.  
    35.  
    36.     line(this->x,this->y,d2.x,d2.y);
    37.     }
    38. };
    39.  
    40. class DOTHI
    41. {
    42. private:
    43.     int SoNut; // so nut thuc su co tren do thi
    44.     NUT *nut; //kbao con tro *nut-tra ve kieu NUT
    45.     int trongso[TOIDA][TOIDA];//kbao mang chua trong so
    46. public:
    47.     void nhap();
    48.     void kdongMT();
    49.     void duongngan1();
    50.     void dijkstra(int s, int t, int *ngan1, int duongdi[]);
    51.     void ve();
    52. };
    53. // Khoi dong ma tran trong so cua do thi
    54. void DOTHI::kdongMT()
    55. {
    56. int i, j;
    57. for(i = 0; i < TOIDA; i++)
    58. for(j = 0; j < TOIDA; j++)
    59. trongso[i][j] = VOCUNG;
    60. }
    61. void NUT::nhap()
    62. {
    63. cout<<"\nx=";cin>>x;
    64. cout<<"\ny=";cin>>y;
    65. }
    66. void DOTHI::nhap()
    67. {   int x,y,wt;
    68. cout<<"Do thi co bao nhieu nut :"<<endl;
    69. cout<<"SoNut=";cin>>SoNut;
    70. cout<<"\nHay nhap cac cung cua do thi (Nhap "<<SoNut<<" "<<SoNut<<"de ket thuc:"<<endl;
    71. x=0;
    72. y=0;
    73. while(x<=SoNut && y<=SoNut)
    74.    {
    75.    cout<<"Nhap cung :";cin>>x>>y;
    76.    if(x<=SoNut && y<=SoNut)
    77.     {
    78.     cout<<"Trong so cua cung"<<x<<" "<<y<<":";cin>>wt;
    79.     trongso[x][y]=wt;
    80.     }
    81.    };
    82. }
    83. void DOTHI::ve()
    84. {   for(int i=1;i<SoNut;i++)
    85.         nut[i].ve_dt(nut[i+1],14);
    86.     nut[1].ve_dt(nut[SoNut],14);
    87. }
    88. void ktdh()   //Ham khoi tao do hoa
    89. {   int gm=0,gd=0;
    90.     initgraph(&gm,&gd,"..\\bgi");
    91.     if(graphresult()!=0)
    92.     {   cout<<"Loi do hoa!"; getch(); exit(1);
    93.     }
    94. }
    95. /* Ham dijkstra: tim duong di ngan nhat tren do thi co trong so theo
    96. giai thuat Dijkstra.
    97. Du lieu nhap:
    98. s: nut di, t: nut den
    99. Du lieu xuat:
    100. ngan1: chieu dai duong di ngan nhat tu s den t
    101. duongdi[]: mang ghi nhan lo trinh ngan nhat tu s den t, luu y
    102. duongdi[i] la nut truoc nut i tren lo trinh ngan nhat */
    103. void DOTHI:: dijkstra(int s, int t, int *ngan1, int duongdi[])
    104. {
    105. int i, k, kc, nuthientai, min, kcachmoi;
    106. int tapcacnut[TOIDA]; // tap cac nut da xet
    107. int kcach[TOIDA]; /* mang luu chieu dai duong di ngan nhat tu nut
    108. s den cac nut khac */
    109.  
    110. // Buoc 0: khoi dong mang tapcacnut[] va kcach[]
    111. for(i = 0; i < SoNut; i++)
    112. {
    113. tapcacnut[i] = FALSE;
    114. kcach[i] = VOCUNG;
    115. }
    116.  
    117. // dua nut s vao tap nut da xet
    118. tapcacnut[s] = TRUE;
    119. kcach[s] = 0;
    120. nuthientai = s;
    121.  
    122. /* vong lap thuc hien cac buoc 1, 2, ... cho den khi dua duoc nut t vao
    123. tap nut da xet */
    124. while(nuthientai != t)
    125. {
    126. min = VOCUNG;
    127. kc = kcach[nuthientai]; /* kc chieu dai duong di ngan nhat tu nut s
    128. den nuthientai */
    129. for(i = 0; i < SoNut; i++)
    130. if(tapcacnut[i] == FALSE)
    131.   {
    132.   kcachmoi = kc + trongso[nuthientai][i];
    133.   if(kcachmoi < kcach[i])
    134.     {
    135.     kcach[i] = kcachmoi;
    136.     duongdi[i] = nuthientai; /* gan nuthientai la nut truoc
    137.     nut i tren lo trinh */
    138.     }
    139.   if(kcach[i] < min)
    140.     {
    141.     min = kcach[i];
    142.     k = i;
    143.     }
    144.   }
    145. // Dua nut k vao tap nut da xet
    146. nuthientai = k;
    147. tapcacnut[nuthientai] = TRUE;
    148. }
    149. *ngan1 = kcach[t];
    150. }
    151. void DOTHI::duongngan1()
    152. { int s,t,i;
    153. int ngan1;
    154. int duongdi[TOIDA];
    155. cout<<"\nNhap nut di";cin>>s;
    156. cout<<"\nNhap nut den";cin>>t;
    157. dijkstra(s,t,&ngan1,duongdi);
    158. cout<<"Duong di ngan nhat tu"<<s<<"->"<<t<<"la "<<ngan1;
    159. cout<<"\nLo trinh: ";
    160. i=t;
    161. while(i!=s)
    162. {
    163. cout<<i<<"<-";
    164. i=duongdi[i];
    165. }
    166. cout<<s;
    167. }
    168. void main()
    169. { clrscr();
    170. DOTHI dothi;
    171. dothi.nhap();
    172. dothi.kdongMT();
    173. dothi.duongngan1();
    174. ktdh();
    175. dothi.ve();
    176. getch();
    Đã được chỉnh sửa lần cuối bởi bluesky_123078 : 31-10-2008 lúc 11:25 PM. Lý do: cho vao tag code

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bạn hãy đưa code vào tag và sửa lại tiêu đề phản ánh được nội dung của bài viết nếu không mod sẽ xóa bài đó. Tham khảo cách đưa code vào tag tại đây :
    http://forums.congdongcviet.com/showthread.php?t=6131
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    10 2008
    Bài viết
    2

    cảm ơn vì đã nhắc nhở

  4. #4
    Ngày gia nhập
    10 2008
    Bài viết
    2

    huhu,bài này chẳng thấy ai quan tâm đến thế,có ai giúp tôi với ko

  5. #5
    Ngày gia nhập
    04 2008
    Bài viết
    336

    Bạn áp dụng giải thuật ko có đồ họa xem chạy đúng ko đã rồi hãy gán phần đồ họa vào chứ làm 1 nùi code thế này nhìn cũng ngại lắm bạn à
    code ra gió bão

  6. #6
    Ngày gia nhập
    10 2008
    Bài viết
    2

    Mặc định Xây dựng lớp DOTHI

    mình bỏ phần đồ họa rồi ma vẫn không được,chảng thấy hiện kết quả j cả,bạn xem giúp mình nhé

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

    có ai hướng dẫn mình chút được ko,

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