PDA

View Full Version : حرفه ای: سوال: جست و جوی اول سطر bfs واول عمق dfs لطفا در تشریح این کد بنده رو کمک کنید.



mafiaitalia
چهارشنبه 14 اسفند 1392, 18:16 عصر
با سلام.
پس از جست و جوی زیاد و خوندن مقالات فراوون کاربرد و کاررایی این الگوریتم رو متوجه شدم.
اگر ممکنه بنده رو در روش پیاده سازیه این الگوریتم راهنمایی کنید.
البته کد قابل اجرای الگوریتم bfs و dfs رو در پایین آوردم و برنامه به صورت کامل در dev c++ اجرا میشه!
ولی مراحل پیاده سازی رو متوجه نمیشم اگر ممکنه خطهای برنامه رو به اختصار یک توضیحی بدید.
با تشکر.


#include <iostream>
#include <queue>
using namespace std;
int ** A;
bool *Visit;
int n; //number of vertices
int m; //number of edges
queue<int> q;
void DFS(int i)
{
Visit[i] = true;
cout << i << " Visited\n";
for(int j=0;j < n;j++)
if(Visit[j] == false && A[i][j] == 1)
DFS(j);
}
void BFS(int i)
{
q.push(i);
Visit[i] = true;
while(q.empty() == false)
{
int x = q.front();
cout << x << " Visited\n";
for(int j=0;j <n; j++)
if(Visit[j] == false && A[x][j] == 1)
{
q.push(j);
Visit[j] = true;
}
q.pop();
}
}
void Initialize()
{
//Initializing
A = new int*[n];
Visit = new bool[n];
for(int i=0;i<n;i++)
{
A[i] = new int[n];
for(int j=0;j<n;j++)
A[i][j] = 0;
Visit[i] = false;
}
}
int main()
{
//Reading input
cout << "Enter vertex number\n";
cin >> n;
cout << "Enter edge number\n";
cin >> m;
cout << "Enter edges as i j (vertex numbering starts from 0)\n";

Initialize();
//Reading Edges
for(int i =0 ;i<m ;i++)
{
int x , y;
cin >> x >> y;
if(x >= n || y >= n)
{
cout << "vertex number must be in range 0 .. " << n-1 <<endl;
i--;
}
else
A[x][y] = A[y][x] = 1;
}
cout << "DFS Starts from vertex 0 ...\n";
DFS(0); //DFS starts from vertex 0

//Updating visit to its initial value
for(int i=0 ;i<n ; i++)
Visit[i] = false;
//BFS
cout << "BFS Starts from vertex 0 ...\n";
BFS(0); //BFS starts from vertex 0
return 0;
}