Advertisement
XuanHong

dfs_stack, bfs_queue

Jan 29th, 2015
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1.  
  2. // dfs sử dụng stack, bfs sử dụng queue
  3. #include <iostream>
  4. #include <fstream>
  5. #include <stack>
  6. #include <queue>
  7. using namespace std;
  8.  
  9. int a[100][100];
  10. int vet[100];
  11. int n;
  12. int k;
  13. string s;
  14. int start;
  15. int finish;
  16.  
  17. void readfile(string s)
  18. {
  19.     ifstream f;
  20.     f.open(s);
  21.     if(f.fail())
  22.     {
  23.         return ;
  24.     }
  25.     f>>n;
  26.     for(int i=0; i<n; i++)
  27.     {
  28.         for(int j=0; j<n; j++)
  29.         {
  30.             f>>a[i][j];
  31.         }
  32.     }
  33.     f.close();
  34. }
  35.  
  36. void dfs_stack( int a[100][100], int start, int n, int vet[100]) // dfs_queue(...)
  37. {
  38.     int danhdau[100] = {0};
  39.     //stack<int> c;
  40.     queue<int> c;
  41.     c.push(start); 
  42.     for(int i=0; i< n; i++)
  43.     {
  44.         vet[i]=-1;
  45.     }
  46.     while(!c.empty())
  47.     {
  48.         int topstack =c.front();
  49.         //int topstack = c.top();
  50.         danhdau[topstack] = 1;
  51.         c.pop();       
  52.         for(int i=0; i<n; i++)
  53.         {
  54.             if(a[topstack][i]==1&&danhdau[i]==0)
  55.             {
  56.                 c.push(i);
  57.                 danhdau[i]=1;
  58.                 vet[i]=topstack;
  59.             }
  60.         }
  61.     }
  62. }
  63.  
  64. int main()
  65. {
  66.     s= "input.txt";
  67.     readfile(s);
  68.    
  69.     cout<<"nhap dinh bat dau va ket thuc, nhap trong gioi han cho phep tu 0 den "<< n-1 <<endl;
  70.     cin >> start >> finish;
  71.  
  72.     dfs_stack(a,start,n,vet);  
  73.    
  74.     if(vet[finish]==-1)
  75.     {
  76.         cout<<"khong co duong di";
  77.     }
  78.     else
  79.     {
  80.         stack<int> st;
  81.         int k = finish;
  82.         while(k!=-1)
  83.         {
  84.             st.push(k);
  85.             k=vet[k];
  86.         }
  87.         while (!st.empty())
  88.         {
  89.             cout<<st.top()<<'\t';
  90.             st.pop();
  91.         }
  92.     }
  93.     cout<<endl;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement