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

Đề tài: Thuật toán Ford - Fulkerson...Code đã chạy mà khi ra kết quả thì ra số 0 . Ai biết chỉ dùm với..

  1. #1
    Ngày gia nhập
    09 2010
    Bài viết
    3

    Red face Thuật toán Ford - Fulkerson...Code đã chạy mà khi ra kết quả thì ra số 0 . Ai biết chỉ dùm với..

    C Code:
    1. #include <conio.h>
    2. #include <stdio.h>
    3. #define max 1000
    4. int A[max][max];
    5. int f[max][max];//Flow on edges
    6. int p[max], e[max];
    7. int Q[max];//Quene
    8. int n, s, t;//Number of vertex, the source, the sink
    9. int fr=0, r=0;//Front, Rear of Quene
    10. int initNetwork(){
    11.     //initialize network with zero flow
    12.     int i, j;
    13.     printf("Nhap vao so dinh cua mang da cho:");
    14.     scanf("%d", &n);
    15.     printf("Nhap vao dinh phat:");scanf("%d", &s);
    16.     printf("\nNhap vao dinh thu:");scanf("%d", &t);
    17.     if(n>max) return 1;
    18.     printf("Nhap vao quan he cua cac dinh theo quy tac\n\n\n");
    19.     printf("\t -c[i, j] neu i di toi j");
    20.     printf("\nA[i, j]=|                     ");
    21.     printf("\n\t -0 trong truong hop con lai\n\n\n");
    22.     for(i=0; i<n; ++i){
    23.         for(j=0; j<n; ++j){
    24.             printf("A[%d][%d]=", i+1, j+1);
    25.             scanf("%d", &A[i][j]);
    26.             f[i][j]=0;
    27.         }
    28.     }
    29.     return 0;
    30. }
    31. int PrintNetwork(){
    32.     //Print Network into matrix stype
    33.     int i, j;
    34.     for(i=0; i<n; ++i){
    35.         for(j=0; j<n; ++j){
    36.             printf(" %3d", A[i][j]);
    37.         }
    38.         printf("\n");
    39.     }
    40.     return 0;
    41. }
    42. int size(){
    43.     //size of quene
    44.     return (max-fr+r);
    45. }
    46. int isEmpty(){
    47.     //quene is empty?
    48.     return (fr=r);
    49. }
    50. int enquene(int m){
    51.     //insert m to quene
    52.     if(size()>max) printf("Hang doi day");
    53.     else{
    54.          Q[r]=m;
    55.          r++;
    56.     }
    57.     return m;
    58. }
    59. int dequene(){
    60.     //delete an element from quene
    61.     int m;
    62.     if(isEmpty()) printf("Hang doi rong");
    63.     else{
    64.          m=Q[fr];
    65.          fr++;
    66.          return m;
    67.     }
    68. }
    69. int min(int a, int b){
    70.     //minimum between a and b
    71.     if(a<b) return a;
    72.     else return b;
    73. }
    74. int FindPath(){
    75.     //Find augment path, return 1 if finding an augment path
    76.     int i=0, u, v;
    77.     for(i=0; i<n; ++i){
    78.         p[i]=-1;
    79.     }
    80.     p[s]=s; e[s]=1<<16;
    81.     enquene(s);
    82.     while(!isEmpty()){
    83.         u=dequene();
    84.         for(v=0; v<n; ++v){
    85.             if((A[u][v]>0)&&(f[u][v]<A[u][v])){
    86.                 if(p[v]!=-1){
    87.                     p[v]=u;
    88.                     e[v]=min(e[u], A[u][v]-f[u][v]);
    89.                     enquene(v);
    90.                     if(v==t) break;
    91.                 }
    92.             }
    93.         }
    94.             if((A[v][u]>0)&&(f[v][u]>0)){
    95.                 if(p[v]!=-1){
    96.                     p[v]=-u;
    97.                     e[v]=min(e[u], f[v][u]);
    98.                     enquene(v);
    99.                     if(v==t) break;
    100.                 }
    101.             }
    102.     }
    103.     if(p[t]>=0) return 1;
    104.     else return 0;
    105. }
    106. int Inc_Flow(){
    107.     //Increase flow along an augment path
    108.     int tang=e[t];
    109.     int v=p[t];
    110.     int u=t;
    111.     //printf("max");
    112.     while(u!=s){
    113.         if(v>0){
    114.                 f[v][u]=f[v][u]+tang;
    115.                 A[v][u]=A[v][u]-f[v][u];
    116.                 A[u][v]=A[u][v]+f[v][u];
    117.                 }
    118.         else{
    119.             v=-v;
    120.             f[u][v]=f[u][v]-tang;
    121.             A[u][v]=A[u][v]-f[u][v];
    122.             A[v][u]=A[v][u]+f[u][v];
    123.         }
    124.         u=v; v=p[u];
    125.     }
    126.     printf("f[2,5]= %d", f[2][5]);
    127.     return 0;
    128. }
    129. int main(){
    130.     int i, j, fmax=0;
    131.     printf("********************************************\n");
    132.     printf("\tBAI TAP LON MON TOAN ROI RAC\n");
    133.     printf("\t\tSinh vien thuc hien: Nguyen Ngoc Dat\n");
    134.     printf("\t\tSo hieu sinh vien: 20090676\n");
    135.     printf("********************************************\n");
    136.     printf("\t\t\t%c\t%c\n", 3, 3);
    137.     printf("\t>>>BAI TOAN LUONG CUC DAI TRONG MANG<<<\n");
    138.     if(initNetwork()) printf("So dinh nhap vao vuot qua so phan tu toi da cua mang");
    139.     printf("Ma tran trong so bieu dien mang:\n\n");
    140.     PrintNetwork();
    141.     int stop=0;
    142.     while(!stop){
    143.         if(FindPath()) Inc_Flow();
    144.         else stop=1;
    145.     }
    146.     i=0;
    147.     for(j=0; j<n; ++j){
    148.         if(A[i][j]!=0) fmax+=f[i][j];
    149.     }
    150.     printf("Luong cuc dai trong mang da cho la: %d", fmax);
    151.     getch();
    152.     return 0;
    153. }
    Đã được chỉnh sửa lần cuối bởi aydada : 29-09-2011 lúc 10:23 PM. Lý do: cho code vào tag

  2. #2
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Ngó thấy 2 lỗi, bạn cứ sửa đi rồi nếu chưa được mình tìm tiếp
    1. if(p[v]!=-1){ (2 chỗ đều như vậy)
    Tất cả gán =-1 hết, kiểm tra != -1 thì nó chạy đi đâu bây giờ
    2. if((A[v][u]>0)&&(f[v][u]>0)){
    Cái này sao lại bỏ ra ngoài vòng lặp for v

  3. #3
    Ngày gia nhập
    09 2010
    Bài viết
    3

    vẫn k đc.

    ai biết sửa dùm với đi

    k thì có code tham khảo send mình với

  4. #4
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    697

    Trước hết, hãy học cách nói câu "cảm ơn".

Các đề tài tương tự

  1. Code của thuật toán Ford fulkerson trong C. Làm sao để biên dịch?
    Gửi bởi eragon100991 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 4
    Bài viết cuối: 16-04-2013, 05:14 AM
  2. Giúp mình sửa lại code quản lý điểm sinh viên dùm cái. Mình ko biết sửa thế nào cả
    Gửi bởi ronghappy13 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 04-01-2013, 08:49 PM
  3. Tìm luồng cực đại trong mạng sử dụng thuật toán ford-fulkerson chạy không đúng
    Gửi bởi mr.en_tu_di trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 24-11-2012, 09:07 AM
  4. Tìm luồng cực đại trong mạng bằng thuật toán Ford-Fulkerson?
    Gửi bởi llthanh714 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 10-02-2012, 12:10 PM
  5. Vẽ đồ thị trong thuật toán Ford-Fulkerson ?
    Gửi bởi llthanh714 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 07-03-2011, 08:01 PM

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