计算机图形学E6——倒水问题emm和OpenGL没啥关系
其他计算机图形学实验见 链接
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1010;struct node//状态结构体
{int a, b;int last;int step;
};int vis[maxn][maxn];
int A, B, C;
node q[maxn];
int front, rear;int bfs(int x, int y)
{node t;t.a = x; t.b = y; t.step = 0; t.last = -1;//q.push(t);q[front] = t;rear++;while (front < rear){//node now = q.front(); q.pop();node now = q[front]; //front++;//cout << "front=" << front << " rear=" << rear << endl;//cout << now.a << " " << now.b << endl;if (now.a == C || now.b == C){q[rear] = now;//记得保存最后这一次,否则输出的路径是错误结果的路径return now.step;}if (!vis[now.a][now.b]){vis[now.a][now.b] = 1;node temp;temp.a = 0; temp.b = 0; temp.last = -1; temp.step = 0;for (int i = 1; i <= 6; i++){//1、a有水,倒空if (i == 1 && now.a > 0){temp.a = 0;temp.b = now.b;temp.step = now.step + 1;temp.last = front;//q.push(temp);/*if (!vis[temp.a][temp.b]){q[rear] = temp; rear++;}*/}//2、b有水,倒空if (i == 2 && now.b > 0){temp.a = now.a;temp.b = 0;temp.step = now.step + 1;temp.last = front;//q.push(temp);/*if (!vis[temp.a][temp.b]){q[rear] = temp; rear++;}*/}//3、a未满 a灌满水if (i == 3 && now.a < A){temp.a = A;temp.b = now.b;temp.step = now.step + 1;temp.last = front;//q.push(temp);/*if (!vis[temp.a][temp.b]){q[rear] = temp; rear++;}*/}//4、b未满 b灌满水if (i == 4 && now.b < B){temp.a = now.a;temp.b = B;temp.step = now.step + 1;temp.last = front;//q.push(temp);/*if (!vis[temp.a][temp.b]){q[rear] = temp; rear++;}*/}//5、a有水,b没满,a倒入bif (i == 5 && now.a > 0 && now.b < B){if (now.a > B - now.b){temp.a = now.a - (B - now.b);temp.b = B;temp.step = now.step + 1;temp.last = front;//q.push(temp);/*if (!vis[temp.a][temp.b]){q[rear] = temp; rear++;}*/}else{temp.a = 0;temp.b = now.a + now.b;temp.step = now.step + 1;temp.last = front;//q.push(temp);/*if (!vis[temp.a][temp.b]){q[rear] = temp; rear++;}*/}}//6、b有水,a没满,b倒入aif (i == 6 && now.a < A && now.b>0){if (now.b > A - now.a){temp.a = A;temp.b = now.b - (A - now.a);temp.step = now.step + 1;temp.last = front;//q.push(temp);/*if (!vis[temp.a][temp.b]){q[rear] = temp; rear++;}*/}else{temp.b = 0;temp.a = now.a + now.b;temp.step = now.step + 1;temp.last = front;//q.push(temp);/*if (!vis[temp.a][temp.b]){q[rear] = temp; rear++;}*/}}if (!vis[temp.a][temp.b]){q[rear] = temp; rear++;}}}front++;}return -1;
}void displayPath(int i)
{if (q[i].last == -1){cout << "(" << q[i].a << ", " << q[i].b << ") -> ";return;}displayPath(q[i].last);cout << "(" << q[i].a << ", " << q[i].b << ") ->" ;
}
//void displayPath(node x)
//{// if (x.last == -1)
// {// cout << "(" << x.a << ", " << x.b << ") ->";
// return;
// }
// displayPath(q[x.last]);
// cout << "(" << x.a << ", " << x.b << ") -> ";
//}int main()
{cin >> A >> B >> C;int t = bfs(0, 0);if (t != -1){cout << "Yes" << endl;cout << "操作次数为:" << t << endl;//displayPath(q[rear]);displayPath(rear);}elsecout << "Impossible" << endl;return 0;
}
计算机图形学E6——倒水问题emm和OpenGL没啥关系相关推荐
- [XJTUSE]计算机图形学第二章作业,使用OpenGL编程实现DDA、中点画线和Bresenham算法和中点画圆法
首先是Windows10 + Visual Studio 2019 搭建OpenGL环境可以查看如下链接: 萌新向!!!Windows10 + Visual Studio 2019 搭建OpenGL环 ...
- 【计算机图形学 】扫描线多边形填充算法 | OpenGL+鼠标交互
文章目录 其他计算机图形学实验 前言 思路借鉴 步骤 1.点的结构体 2. AET 活性边表.NET新边表 的结构体 3. 扫描线算法实现 4. 改变鼠标响应函数 完整代码 总结 其他计算机图形学实验 ...
- 【计算机图形学 】Cohen-Sutherland 直线裁剪算法 | OpenGL+鼠标交互
文章目录 其他计算机图形学实验 前言 代码借鉴 步骤 1.点的结构体 2. 创建用于裁剪的窗口并绘制 3.画点函数 4. Cohen-Sutherland 直线裁剪算法部分 4.1 判断点所在位置,生 ...
- 【计算机图形学】实验报告1用OpenGL画线命令绘制一个多边构成图形或场景
#include <GL/glut.h> #include <math.h> const int n = 200; const float R = 0.5; const flo ...
- 【学习日志】2022.08.19 计算机图形学、OpenGL、疼迅云游戏引擎面试、GLAD、GLFW、virtual
计算机图形学知识图谱 .学习路线 OpenGL 概述 简介 - LearnOpenGL CN (learnopengl-cn.github.io) 当前比较流行的搭配是 freeglut + glew ...
- 计算机图形学三大应用领域,计算机图形学作业
计算机图形学作业题 1. 计算机中由图形的形状参数(方程或分析表达式的系数,线段的端点坐标等)加属性参数(颜色.线型等)来表示图形称图形的参数表示:枚举出图形中所有的点称图形的点阵表示,简称为图像(数 ...
- 计算机有哪些应用领域 请举例说明,计算机图形学作业求助
计算机图形学作业求助 计算机图形学作业题 计算机中由图形的形状参数(方程或分析表达式的系数,线段的端点坐标等)加属性参数(颜色.线型等)来表示图形称图形的参数表示:枚举出图形中所有的点称图形的点阵表示 ...
- 计算机图形学【清华大学出版社】
计算机图形学 计算机图形系统 图形显示与生成 图形观察与交换 真是感图形生成(课本上没有,可以自行理解) 曲线曲面基础 三维几何造型(点线面体的模型构造) 第一章 相关概念 发展简况 应用领域 相关开 ...
- 计算机图形基础实验图形变换,北方工业大学 计算机图形学实验 几何变换
北方工业大学 计算机图形学实验 几何变换 四.用OpenGL函数库实现几何图元旋转特效 在Nehe教程Lesson04基础上,修改程序,在屏幕上画两个三角形.两个四边形,并完成相应动画效果,三角形A绕 ...
最新文章
- 【Java】排序算法 之 【归并排序】 总结
- HDU4858 项目管理 其他
- ptaa乘以b_《C语言程序设计》实验作业--PTA顺序结构练习
- 从未如此简单:10分钟带你逆袭Kafka!
- 熬夜整理出40张可视化大屏模板,不敲一个代码就能直接套用
- 小试ImageMagik——使用篇
- python提示AttributeError: 'NoneType' object has no attribute 'append'
- SpringMVC课堂笔记
- java 智能一卡通系统_基于Java框架的银医一卡通系统设计
- 精密测量仪器的气源维护知识
- 18项政策奖励助力武汉加快区域金融中心建设,申报奖励以及申报流程汇总
- CTFshow_萌新(密码)
- 用手机远程控制电脑的软件 ---TeamViewer远程控制
- LINUX下LAMP与PHPWIND
- 今年今日==我的生日
- 我在VsCode上看基金,你呢?
- 深度学习中的遥感影像数据集
- 15.三层交换与二层交换、策略路由与路由策略
- Java注解和反射,Java教程马士兵全集
- python麦克风监听_python实时监听麦克风
热门文章
- zabbix agent监控主机配置
- MySQL---InnoDB引擎隔离级别详解
- Linux 添加计划任务
- 说说我在项目中为什么不用实体框架,如果说我在诋毁你所爱的EF,请进来.
- Unity3d Shader开发(三)Pass(Fog )
- _GUN_SOURCE宏
- python socket自动重连_python之tcp自动重连
- 明晚8点直播丨经典知识库:深入解析Oracle检查点
- Oracle 12c 关于密码(password)的几个新特性小结
- 关于查询MySQL事务阻塞信息,你还可以这样玩?