急求~~指教
请问亲们这个代码怎么会运行结果错误喃?
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <cstdio>
#include <queue>
using namespace std;
const int MaxLen=100;//设定图最多包含100个顶点
bool visited[MaxLen];//访问标志数组,标识每个顶点是否已访问
int matrix[MaxLen][MaxLen];//图的邻接矩阵
int vexnum;//图的顶点数量
void DFS(int v) { //从第v个顶点出发递归地深度优先遍历图G
//可以参考课本P169算法7.5的算法进行编写
int w;
visited[v] = true;
printf(" (%d) ", v);//输出顶点编号,表示该顶点已被访问
//----------------------完成以下代码编写--------------------------------------
//找出当前顶点v的所有邻接顶点
int i, k, AdjVex[MaxLen];
for(i=0;i<MaxLen;i++)//初始化AdjVex数组所有数据为-1
AdjVex[i]=-1;//write some code here...........
k=0;
//把顶点v的所有邻接顶点放入到数组AdjVex中,k记录邻接顶点的数量
if(matrix[v][k])
{
AdjVex[k]= k;
k++;
}
//write some code here...........
//----------------------完成以上代码编写--------------------------------------
//对v的邻接顶点进行遍历
i=0;
for (w=AdjVex[i]; w!=-1; w=AdjVex[++i])
if (!visited[w]) // 对v的尚未访问的邻接顶点w递归调用DFS
DFS(w);
}
void DFSTraverse() //对图G作深度优先遍历
{
int v;
for (v=0; v<vexnum; ++v)
visited[v] = false; // 访问标志数组初始化
for (v=0; v<vexnum; ++v)
if (!visited[v]) DFS(v); // 对尚未访问的顶点调用DFS
}
void BFSTraverse() { // 按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组visited。
//请对照课本P170算法7.6进行编写
int v,w, u;//这些变量用于存放顶点编号
int i, k, AdjVex[MaxLen];//这些变量用于找出指定顶点的邻接结点
queue<int> Q;
for (v=0; v<vexnum; ++v) visited[v] = false; // 访问标志数组初始化
//----------------------完成以下代码编写--------------------------------------
for (v=0; v<vexnum; ++v) {
if(!visited[v]){//write "if" code here...........{ //如果v尚未访问
visited[v] = true;//...........//该顶点标识为已访问
printf(" (%d) ", v);//输出顶点编号,表示该顶点已被遍历
Q.push(v);//...........// v入队列
while(!Q.empty()){//...........{//当队列非空,执行while循环
u=Q.front();//...........//取队头元素放入u中
Q.pop();}//...........//队头元素弹出
//找出当前顶点u的所有邻接顶点
//初始化AdjVex数组所有数据为-1
for(i=0;i<MaxLen;i++)//write some code here...........
AdjVex[i]=-1;
k=0;
//最终u的所有邻接顶点放入AdjVex数组中,k记录邻接顶点的数量
if(matrix[u][k]==1)
{
AdjVex[k]= k;
k++;
}
//对u的邻接顶点进行遍历
i=0;
for (w=AdjVex[i]; w!=-1; w=AdjVex[++i]) {
if (!visited[w]){//write "if" code here....{// 如果w尚未访问
visited[w] = true;//...........//该顶点标识为已访问
printf(" (%d) ", w);//...........//输出顶点编号,表示该顶点已被遍历
Q.push(w);//...........//w入队列Q
}//} //end if
}//} //end while
}//} //end if
}//for
//----------------------完成以上代码编写--------------------------------------
} // BFSTraverse
int main(){
int i, j;
//输入图的初始化数据
printf("请输入图顶点个数:");
scanf("%d", &vexnum);
printf("请输入图的邻接矩阵:\n");
for(i=0; i<vexnum; i++)
for(j=0; j<vexnum; j++)
scanf("%d", &matrix[i][j]);
printf("----------------------------------------\n");
//深度优先遍历
printf("图深度优先遍历结果如下:\n");
DFSTraverse();
printf("\n");
printf("----------------------------------------\n");
//广度优先遍历
printf("图广度优先遍历结果如下:\n");
BFSTraverse();
printf("\n");
return 0;
}
[解决办法]
调试是基本功