首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

急求~指教解决方案

2012-05-13 
急求~~指教请问亲们这个代码怎么会运行结果错误喃?#include iostream.h#include stdio.h#include std

急求~~指教
请问亲们这个代码怎么会运行结果错误喃?
#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;
}


[解决办法]
调试是基本功

热点排行