好的,所以,首先,我不知道我在用迭代加深做什么。我一直在努力让这段代码工作,但我做不到。我在网上查看,在 C++ 中找不到此搜索的任何参考。
void Graph::IDS(int x, int required, int depth = 1)
{
if(x == required) return;
cout << "Iterated Deepening Search for " << required << ", starting from vertex " << x << " : " << endl;
IDS_util(x, required, depth);
cout << endl;
}
void Graph::IDS_util(int x, int required, int depth)
{
stack s;
bool *visited = new bool[n+1];
int i, j, k;
for(i = 0; i <= n; i++)
visited[i] = false;
cout << "Depth = " << depth << ": ";
visited[x] = true;
for (int c = 1; c <= n; c++){
s.push(x);
if(isConnected(x, c) && !visited[c])
{
for (j = 0; j < depth; j++){
k = s.pop();
if(k == required) return;
cout << "[" << k <<"] ";
for (i = n; i >= 0 ; --i)
if (isConnected(k, i) && !visited[i]) {
s.push(i);
visited[i] = true;
}
}
}
}
if(depth == n) return;
cout << endl;
IDS_util(x, required, depth+1);
}
邻接矩阵的输出:
0,1,1,1,0,0,0,0,0
0,0,0,0,1,0,0,0,0
0,0,0,0,0,1,1,0,0
0,0,0,0,0,0,0,1,0
0,0,0,0,0,0,0,0,1
0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0
这是该图的方向版本:
[1]
/ | \
[2] [3] [4]
/ / \ \
[5] [6] [7] [8]
/
[9]
是:
Iterated Deepening Search for 7, starting from vertex 1 :
Depth = 0:
Depth = 1: [1]
Depth = 2: [1] [2]
Depth = 3: [1] [2] [5]
Depth = 4: [1] [2] [5] [9]
Depth = 5: [1] [2] [5] [9] [3]
Depth = 6: [1] [2] [5] [9] [3] [6]
Depth = 7: [1] [2] [5] [9] [3] [6]
我从理论上知道搜索应该做什么,我可以在某种程度上告诉我我的搜索在做什么,但我不知道如何解决它。任何人都可以提供的任何帮助将不胜感激。