10l7l3l倒水的for循环和queue的使用(待续

1.讲解广度优先搜索以及普及优先级概念

一个最基础的

https://www.cnblogs.com/tlysMoodspace/p/11832181.html

核心代码:

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();  //弹
  }
}




posted @ 2019-11-12 12:35  tly2022  阅读(671)  评论(0编辑  收藏  举报