• 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("
    	%d	%d	%d
    ",b[i].z[0],b[i].z[1],b[i].z[2]);
       	printf("%d	%d	%d	%d
    ",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("
    ");
    	}
    	m=0;
       while(head<tail){
       	if(m==1) break;
        btime++;
        bord=tail;
        for(i=head;i<bord;i++){
    	if(m==1) break; 
      		printf("
    %d	%d	%d	%d
    ",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("找到了! "); for(k=1;k<b[tail-1].n[0];k++){ for(j=0;j<3;j++) printf("%d ",b[b[tail-1].n[k]].z[j]); printf(" "); } } }

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




    欢迎来我们oj刷题 oj地址:http://www.npumdacm.top/
  • 相关阅读:
    wex5 实战 框架拓展之2 事件派发与data刷新
    wex5 实战 框架拓展之1 公共data组件(Data)
    wex5 实战 HeidiSQL 导入Excel数据
    wex5 实战 手指触屏插件 hammer的集成与优劣
    wex5 实战 登陆帐号更换与用户id一致性
    wex5 实战 用户点评与提交设计技巧
    wex5 实战 省市县三级联动与地址薄同步
    wex5 实战 wex5与js的组件关系与执行顺序(父子与先后)
    wex5 实战 单页模式下的多页面数据同步
    [BZOJ]4237: 稻草人
  • 原文地址:https://www.cnblogs.com/tlysMoodspace/p/11841109.html
Copyright © 2020-2023  润新知