10l7l3l倒水的for循环和queue的使用(待续
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10l7l3l倒⽔的for循环和queue的使⽤(待续1.讲解⼴度优先搜索以及普及优先级概念
⼀个最基础的
核⼼代码:
b[0][0]=10; b[1][0]=7; b[2][0]=3;
b[0][1]=10; b[1][1]=0; b[2][1]=0;
//三杯⼦,初始只有10L的杯⼦是满的
// b[0][1]=1; b[1][1]=0; b[2][1]=0;
if(b[0][i]!=0){
//如果10L的杯⼦有酒
if(b[1][i]<7){
//如果7L的杯⼦没满
if(b[0][i]+b[1][i]<7){
//如果10L和7L杯⼦加起来不能补满7L的杯⼦
b[0][tail]=0;
b[1][tail]=b[1][i]+b[0][i];
//全倒⼊7L杯⼦
b[2][tail]=b[2][i];
windows下Dev解10l7l3l倒⽔,for循环版本
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct t{
int z[3];
int num;
int n[100];
}b[10050];
int stime=1; //数字越⼤.休眠时间越久
int m=0,i,j=0,k;
int time1=107,time2=103,time3=710,time4=73,time5=37,time6=310;
int head=1,tail=2,btime=0,bord;
void zzzz(){
b[tail].n[b[i].n[0]]=tail;
for(k=0;k<b[i].n[0];k++) b[tail].n[k]=b[i].n[k];
b[tail].n[0]++;
printf("\n\t%d\t%d\t%d\n",b[i].z[0],b[i].z[1],b[i].z[2]);
printf("%d\t%d\t%d\t%d\n",btime, b[tail].z[0],b[tail].z[1],b[tail].z[2]);
_sleep(stime*1000); //休眠时间单位ms
tail++;
}
int a[6][3]={
0,1,2,
0,2,1,
1,0,2,
1,2,0,
2,0,1,
2,1,0
};
int main()
{
b[0].z[0]=10; b[0].z[1]=7; b[0].z[2]=3;
b[1].z[0]=10; b[1].z[1]=0; b[1].z[2]=0; b[1].n[0]=2; b[1].n[1]=1;
//三杯⼦,初始只有10L的杯⼦是满的
// b[0][1]=1; b[1][1]=0; b[2][1]=0;
//三杯⼦,初始10L的杯⼦是满的
for(i=0;i<6;i++) {
for(j=0;j<3;j++) {
printf("%d ",a[i][j]);
}
printf("\n");
}
m=0;
while(head<tail){
if(m==1) break;
btime++;
bord=tail;
for(i=head;i<bord;i++){
if(m==1) break;
printf("\n%d\t%d\t%d\t%d\n",btime,b[i].z[0],b[i].z[1],b[i].z[2]);
for(j=0;j<6;j++){
if(b[i].z[0]==5||b[i].z[1]==5||b[i].z[2]==5){ m=1;break; }
//找到55平分则退出
if(b[i].z[a[j][0]]!=0){ //如果第a[j][0]的杯⼦有⽔
if(b[i].z[a[j][1]]<b[0].z[a[j][1]]){
if(b[i].z[a[j][0]]+b[i].z[a[j][1]]<b[0].z[a[j][1]]){
b[tail].z[a[j][0]]=0;
b[tail].z[a[j][1]]=b[i].z[a[j][0]]+b[i].z[a[j][1]];
b[tail].z[a[j][2]]=b[i].z[a[j][2]];
}
else{
b[tail].z[a[j][0]]=b[i].z[a[j][0]]+b[i].z[a[j][1]]-b[0].z[a[j][1]];
b[tail].z[a[j][1]]=b[0].z[a[j][1]];
b[tail].z[a[j][2]]=b[i].z[a[j][2]];
}
zzzz();
if(b[tail-1].z[a[j][0]]==5||b[tail-1].z[a[j][1]]==5||b[tail-1].z[a[j][2]]==5){ m=1; break; } }
}
}
}
head=bord;
}
if(m==1){
printf("找到了!\n");
for(k=1;k<b[tail-1].n[0];k++){
for(j=0;j<3;j++) printf("%d\t",b[b[tail-1].n[k]].z[j]);
printf("\n");
}
}
}
queue改造:
using namespace std; //懒
struct Point
{
int x[3];
};
queue <Point> searchlist;
void solvea()
{
Point a;
//初始化
for(int i=0;i<3;i++)
a.x[i] = 0;
searchlist.push(a);
while(!searchlist.empty()){
Point b = searchlist.front(); //取队列顶
for(int i=0;i<3;i++)
cout << temp.x[i] << " ";
cout << endl ;
searchlist.pop(); //弹 }
}。