求高手 帮忙改一下 广度遍历的 错误

来源:互联网 发布:语音网络系统新生注册 编辑:程序博客网 时间:2024/05/01 18:22

 最近在写图的一些程序  写了一个关于 图的广度遍历算法  图是用 邻接矩阵 存储的 代码如下 :希望各位高手帮忙改一下  谢谢:

#include"iostream.h"
#include<deque>
const int M=100;
struct Arcell{
 int adj;// 权值或表示 点的连接情况
 char * info;//边上的信息
};
struct graph{
 int v[M];//顶点表数组
 Arcell arcs[M][M];//邻接矩阵
 int vexnum;//顶点数
 int arcmun;//边数
 int kind;//图形种类
};
class Graph{
public:
     graph G;//创建图
  bool visited[M];//图的访问参数
  void creatgraph();//创建图的函数
  void wfs();//广度搜索 出错的地方
};
void   Graph::creatgraph(){
 cin>>G.arcmun>>G.vexnum>>G.kind;//输入边数。顶点数。与种类。
 for(int i=0;i<G.vexnum;i++)
  cin>>G.v[i];//输入顶点参数
  for( i=0;i<G.vexnum;i++)
   for(int j=0;j<G.vexnum;j++){
    G.arcs[i][j].adj=0;
    G.arcs[i][j].info=false;
   }
   for(i=0;i<G.arcmun;i++){
    int a,b;
    cin>>a>>b;
    G.arcs[a][b].adj=1;
       G.arcs[b][a].adj=1;
    }
}
void Graph::wfs(){
  for(int i=0;i<G.vexnum;i++)
   visited[i]=false;
        deque<int> Q;// 出错的地方  错误为'deque' : undeclared identifier , 'int' unexpected
   for(int j=0;j<G.vexnum;j++){
    if(!visited[j]){
     visited[j]=true;
  cout<<G.v[j];
  Q.push_front(G.v[j]);//出错的地方  E:/jgj/jg.cpp(67) : error C2228: left of '.push_front' must have class/struct/union type
  while(!Q.empty()){//E:/jgj/jg.cpp(68) : error C2228: left of '.empty' must have class/struct/union type
    int a=Q.front();//出队 加上找到 该节点 在 定点数组 中的下标
    int k;
    for(int i=0;i<G.vexnum;i++){//锁定 出队元素 在顶点数列 中的下标
     if(G.v[i]==a){
       k=i;
      break;
     }//k为 出队元素在 v[M]中的下表
     Q.pop_front();
   for(int n=0;n<G.vexnum;n++){
    if(G.arcs[k][n]==1&&!visited[n]){
     cout<<G.v[n];
     visited[n]=true;
     Q.push_back(G.v[n]);
    }
   }
    }
  }
    }
int main(){
 Graph b;
 b.creatgraph();
 b.wfs();
 return 0;
}

原创粉丝点击