Beispiel #1
0
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;
}
Beispiel #2
0
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);
	}
}
Beispiel #3
0
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);
            }
        }
    }
    
    
}
Beispiel #4
0
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
		}
	}
}
Beispiel #6
0
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(&current);
			if(current->lchild!=NULL)
				q.En_Queue(current->lchild);
			if(current->rchild!=NULL)
				q.En_Queue(current->rchild);
		}
	}
}