void MGraph<T>::BFSTraverse() { int i,j; SeqQueue<int, 10> q; bool* isVisited = new bool[vexnum]; for(i = 0; i < vexnum; i++) isVisited[i] = false; for(i = 0; i < vexnum; i++) { if(!isVisited[i]) { cout << vexs[i]; isVisited[i] = true; q.EnQueue(i); while(!q.isEmpty()) { T u = q.DeQueue(); for(j = 0; j < vexnum; j++) { if(edges[u][j] == 1 && !isVisited[j]) { cout << vexs[j]; isVisited[j] = true; q.EnQueue(j); } } } } } delete []isVisited; }
void BinaryTree<T>::levelOrder() { SeqQueue<BinTreeNode<T>*> q; BinTreeNode<T> *p=root; q.enQueue(p); while(q.deQueue(p)) { cout<<p->data; if(p->leftChild!=NULL) q.enQueue(p->leftChild); if(p->rightChild!=NULL) q.enQueue(p->rightChild); } }
void MGraph<DataType>::bFSTraverse(int v) { SeqQueue<int> Q; cout << vertex[v]; vistited[v] = 1; Q.EnQueue(v); while (Q.QueueEmpty()) { v = Q.DeQueue(); for (int i = 0; i < vertexNum; i ++) { if (arc[v][i] == 1 && vistited[i] == 0) { cout << vertex[i]; vistited[i] = 1; Q.EnQueue(i); } } } }
bool BinaryTree<T>::create(T *s) { if(s[0]==EndMark) return false; root=new BinTreeNode<T>; root->data=s[0]; SeqQueue<BinTreeNode<T>*> q; BinTreeNode<T> *temp; int i=1; q.enQueue(root); while(q.deQueue(temp)) { if(s[i]!=EndMark) { BinTreeNode<T> *l=new BinTreeNode<T>; l->data=s[i]; temp->leftChild=l; q.enQueue(l); } else temp->leftChild=NULL; if(s[i+1]!=EndMark) { BinTreeNode<T> *r=new BinTreeNode<T>; r->data=s[i+1]; temp->rightChild=r; q.enQueue(r); } else temp->rightChild=NULL; i+=2; } return true; }
void graph::breadthfirstsearch(const int startpoint,int visited[],void visit(char item))//广度优先遍历 { char getqueuehead,neighborpoint; SeqQueue queue; visit(getvalue(startpoint));//访问初始结点startpoint visited[startpoint]=1;//标记startpoint已经访问 queue.enqueue(startpoint);//结点startpoint入队 while(!queue.isempty())//步骤1:当队列非空时继续执行 { getqueuehead=queue.dequeue();//出队取队头结点getqueuehead neighborpoint=getfirstneighbor(getqueuehead);//查队头结点的第一个邻接结点neighborpoint while(neighborpoint!=-1)//步骤2:若结点neighborpoint存在则继续执行 否则返回步骤1 { if(!visited[neighborpoint])//若结点neighborpoint尚未被访问 { visit(getvalue(neighborpoint));//访问结点neighborpoint visited[neighborpoint]=1;//标记neighborpoint已经访问 queue.enqueue(neighborpoint);//结点neighborpoint入队 } neighborpoint=getnextneighbor(getqueuehead,neighborpoint); //查结点startpoint,neighborpoint的下一个邻接结点为neighborpoint 返回步骤2 } } }
void level(BinTree root){ if(root==NULL) cout<<"EMPTY TREE"<<endl; else{ BinTree current=root; SeqQueue<BinTree> q; q.En_Queue(root); while(!q.Is_Empty()){ current=q.De_Queue(); visit(¤t); if(current->lchild!=NULL) q.En_Queue(current->lchild); if(current->rchild!=NULL) q.En_Queue(current->rchild); } } }