欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

广度优先算法

程序员文章站 2022-05-21 11:23:55
...

打印输出0000-1111所有的二进制数 

#include <stdio.h>
#include <queue>
using namespace std;
typedef struct 
{  
    int data[10];  
    int level;   
}DS;
queue <DS> q;
int main()
{   
     DS d1;
     int i=1,k;
     d1.level=1;
     d1.data[1]=0;
     q.push(d1);
     d1.data[1]=1;
     q.push(d1);
     while(!q.empty())
     {
        d1=q.front();     
        q.pop();
	    if(d1.level==4)
		{
            for(k=1;k<=d1.level;k++)
			    printf("%d ",d1.data[k]);
		    printf("\n");
		}
		else
		{    
            d1.level++;	
		    d1.data[d1.level]=0;  q.push(d1);
		    d1.data[d1.level]=1;  q.push(d1);
		}				
    }
    return 0;
}

输出结果:0000-1111

—————————————————————————————————————

打印输出1234所有的排列 

#include <stdio.h>
#include <queue>
using namespace std;
typedef struct
{	
    int data[10];//保存排列结果
	int left;//假设下标left..n未完成排列
}DS;
queue <DS> q;
int main()
{	
    DS d1;
	int i=1,k,leftCur;
	for(i=0;i<4;i++)  
	    d1.data[i]=i+1;//初始化data
	d1.left=0;  
	q.push(d1);
	while(!q.empty())
	{
        d1=q.front();  
        q.pop();
	    if(d1.left==3)// 如果已完成排列,则输出
	    {	
	        for(i=0;i<4;i++)  printf("%d ",d1.data[i]);
		        printf("\n");
	    } 
	    else 
	    {	
	        leftCur=d1.left;
		    d1.left++;
		    for(k=leftCur;k<4;k++)
		    {	
		        swap(d1.data[leftCur],d1.data[k]);
			    q.push(d1);
                swap(d1.data[leftCur],d1.data[k]);//可以删除此行代码
		    }
	    }
    }
    return 0;
}

输出结果:1234的全排列