广度优先算法
程序员文章站
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的全排列