APP下载地址:http://sumtudou.cn/download.html

关于本帖的算法请见https://blog.csdn.net/qq_36752486/article/details/84189193

这里只是用java重写一遍,在架在android的框架上了。

先贴个截图抖个机灵。。。因为出结果会清空上面的输入框,所以看起来有点奇怪

虽然说得简单,但是实际操作起来还是有一点的难度。

首先是java的队列不像C++一般的单一,这里我们用的是Java中的集合Queue、LinkedList来模拟队列。

之后就是一个最大的bug,找了我快一天的时间。

举个栗子,就是一个java中对象之间的关系。

package com.company;public class Main {public static void main(String[] args) {stu  Q=new stu(13);     ///Q.a=13stu  W=Q;                          ///这句话在java中并不是赋值语句,只是将W作为Q的引用System.out.println("w.a="+W.a);    ///当Q改变时,W的值会跟着改变Q.a=10;System.out.println( "------------------" );System.out.println("w.a="+W.a);System.out.println( "------大分割线------------" );stu  QQ=new stu(13);     ///QQ.a=13      stu  WW=new stu(QQ);                          ///这儿和以上就不用,这里用了重写的构造函数,将qq的值完全赋给了wwSystem.out.println("ww.a="+WW.a);             ///这样ww才是一个单独的对象实例。Q.a=10;System.out.println( "------------------" );System.out.println("ww.a="+WW.a);}
}class stu {public int a;public stu(int k) {this.a = k;}public stu(){}public stu(stu b) {this.a = b.a;}
}

以上问题看懂之后,其他的就好说啦。都是些小操作了。首先贴一个c++改成Java的代码

package com.company;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.util.LinkedList;
import java.util.Queue;class Node {int Now[] = new int[3];     ///当前三个瓶子的水量int step;         ///步数String operate="";public Node(){}public Node(Node q){this.Now[0]=q.Now[0];this.Now[1]=q.Now[1];this.Now[2]=q.Now[2];this.step=q.step;this.operate= new String(q.operate);}
}
public class Main {Node Begin = new Node();Node End = new Node();int All[] = new int[3];    ///三个瓶子的总水量。int vis[][][] = new int[101][101][101];   ///visit数组,记录是否访问过,1为真,0为假int full_bottle, water, last_index;int T, res;boolean Sucess(Node a, Node b, int index)    ///结束判断数组,判断是否到达终点{return (a.Now[index] == b.Now[index]);}public static void main(String[] args) throws Exception {/*   PrintStream out = new PrintStream("h:/javaout.txt");          //流输出,用来打印测试数据的。System.setOut(out);*/System.out.println("the first");Main m = new Main();m.All[0] = 10;m.All[1] = 9;m.All[2] = 7;m.Begin.Now[0] = 0;m.Begin.Now[1] = 0;m.Begin.Now[2] = 5;m.End.Now[0] = 4;m.last_index = 0;m.BFS();}void BFS() {Queue<Node> Q;       ///建立队列,这儿建队有个好处,不用每次完了清空Q = new LinkedList<Node>();for (int i = 0; i < 101; i++)for (int j = 0; j < 101; j++)for (int k = 0; k < 101; k++)vis[i][j][k] = 0;Q.offer(Begin);vis[Begin.Now[0]][Begin.Now[1]][Begin.Now[2]] = 1;while (Q.peek() != null) {Node u =new Node(Q.poll()) ;                            ///!!!!!   这儿花了一天找bug……System.out.println("w"+u.Now[0]+u.Now[1]+u.Now[2]+"w");//    System.out.println("\n\n\n");//  Q.pop();if (Sucess(u, End, last_index)) ///出口{res = u.step;System.out.print("\n      一共需要如下" + res + "步   \n");System.out.println(u.operate);break;}for (int i = 0; i <= 2; i++)         ///三个瓶子之间倒水{for (int j = 0; j <= 2; j++) {if (i != j) {Node over = new Node(u);if (over.Now[i] >= All[j] - over.Now[j])   ///1的水比2空的部分多huozhexiangdeng{over.Now[i] = over.Now[i] - (All[j] - over.Now[j]);over.Now[j] = All[j];} else {over.Now[j] = over.Now[j] + over.Now[i];over.Now[i] = 0;}over.step = over.step + 1;String cz1 = "      把" + String.valueOf(All[i]) + "升瓶子倒到" + String.valueOf(All[j]) + "升瓶子   \n";over.operate = over.operate + cz1;if (vis[over.Now[0]][over.Now[1]][over.Now[2]] == 0) {Q.offer(over);System.out.println(over.operate + "1号"+"\n");vis[over.Now[0]][over.Now[1]][over.Now[2]] = 1;}}}Node now = new Node(u);               ///倒空某个瓶子System.out.println("e"+u.Now[0]+u.Now[1]+u.Now[2]+"e");now.Now[i] = 0;now.step = now.step + 1;// PR(now);String cz = "      倒空" + String.valueOf(All[i]) + "升瓶子   \n";now.operate = now.operate + cz;System.out.println(now.operate + "2号"+ "\n");Q.offer(now);vis[now.Now[0]][now.Now[1]][now.Now[2]] = 1;Node now_2 = new Node(u);              ///倒满某个瓶子,其实这两段可以合成一段写的,太懒了,懒得整理now_2.Now[i] = All[i];now_2.step = now_2.step + 1;String cz_2 = "      装满" + String.valueOf(All[i]) + "升瓶子   \n";now_2.operate = now_2.operate + cz_2;System.out.println(now_2.operate +  "3号"+"\n");// PR(now_2);Q.offer(now_2);vis[now_2.Now[0]][now_2.Now[1]][now_2.Now[2]] = 1;}}}
}

-----------------------------------------我是分割线----------------------------------------------------

接下来上我们android的内容咯。

经过前面的内容,后面也没有什么可说的了。直接上代码吧。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:src="@drawable/bg1"android:scaleType = "centerCrop"></ImageView><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="20dp"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="请分别输入三个瓶子的总容量:"android:textSize="18sp"android:layout_gravity="center"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_gravity="center_horizontal"><EditTextandroid:id="@+id/et_All_0"android:layout_width="100dp"android:layout_height="wrap_content"android:gravity="center_horizontal"android:textSize="18sp"/><TextViewandroid:layout_width="20dp"android:layout_height="wrap_content"/><EditTextandroid:id="@+id/et_All_1"android:layout_width="100dp"android:layout_height="wrap_content"android:gravity="center_horizontal"android:textSize="18sp"/><TextViewandroid:layout_width="20dp"android:layout_height="wrap_content"/><EditTextandroid:id="@+id/et_All_2"android:layout_width="100dp"android:layout_height="wrap_content"android:gravity="center_horizontal"android:textSize="18sp"/></LinearLayout><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="  请对应输入三个瓶子的当前水量:"android:textSize="18sp"android:layout_gravity="center"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_gravity="center_horizontal"><EditTextandroid:id="@+id/et_Now_0"android:layout_width="100dp"android:layout_height="wrap_content"android:gravity="center_horizontal"android:textSize="18sp"/><TextViewandroid:layout_width="20dp"android:layout_height="wrap_content"/><EditTextandroid:id="@+id/et_Now_1"android:layout_width="100dp"android:layout_height="wrap_content"android:gravity="center_horizontal"android:textSize="18sp"/><TextViewandroid:layout_width="20dp"android:layout_height="wrap_content"/><EditTextandroid:id="@+id/et_Now_2"android:layout_width="100dp"android:layout_height="wrap_content"android:gravity="center_horizontal"android:textSize="18sp"/></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="需要将"android:textSize="18sp"/><EditTextandroid:id="@+id/et_Last_All"android:layout_width="80dp"android:layout_height="wrap_content"android:gravity="center_horizontal"android:textSize="18sp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="升瓶子装满"android:textSize="18sp"/><EditTextandroid:id="@+id/et_Last_Now"android:layout_width="80dp"android:layout_height="wrap_content"android:gravity="center_horizontal"android:textSize="18sp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="升水"android:textSize="18sp"/></LinearLayout><Buttonandroid:layout_marginTop="15dp"android:id="@+id/btn_ok"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:textSize="20sp"android:text="确认"/><TextViewandroid:id="@+id/tv_Sum"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="20sp"android:layout_gravity="center_horizontal"/></LinearLayout></android.support.constraint.ConstraintLayout>

Mainactivity。class

package com.example.a11630.waigua;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;import java.util.LinkedList;
import java.util.Queue;class Node {int Now[] = new int[3];     ///当前三个瓶子的水量int step;         ///步数String operate = "";public Node() {}public Node(Node q) {this.Now[0] = q.Now[0];this.Now[1] = q.Now[1];this.Now[2] = q.Now[2];this.step = q.step;this.operate = new String(q.operate);}
}public class MainActivity extends AppCompatActivity implements View.OnClickListener {Button btn_ok;EditText et_All_0, et_All_1, et_All_2, et_Now_0, et_Now_1, et_Now_2, et_Last_All, et_Last_Now;TextView tv_Sum;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn_ok = (Button) findViewById(R.id.btn_ok);btn_ok.setOnClickListener(this);et_All_0 = (EditText) findViewById(R.id.et_All_0);et_All_1 = (EditText) findViewById(R.id.et_All_1);et_All_2 = (EditText) findViewById(R.id.et_All_2);et_Now_0 = (EditText) findViewById(R.id.et_Now_0);et_Now_1 = (EditText) findViewById(R.id.et_Now_1);et_Now_2 = (EditText) findViewById(R.id.et_Now_2);et_Last_All = (EditText) findViewById(R.id.et_Last_All);et_Last_Now = (EditText) findViewById(R.id.et_Last_Now);tv_Sum = (TextView) findViewById(R.id.tv_Sum);}Node Begin = new Node();Node End = new Node();int All[] = new int[3];    ///三个瓶子的总水量。int vis[][][] = new int[101][101][101];   ///visit数组,记录是否访问过,1为真,0为假int full_bottle, water, last_index;int T, res;boolean Sucess(Node a, Node b, int index)    ///结束判断数组,判断是否到达终点{return (a.Now[index] == b.Now[index]);}@Overridepublic void onClick(View v) {if (v.getId() == R.id.btn_ok) {String All_0 = et_All_0.getText().toString();String All_1 = et_All_1.getText().toString();String All_2 = et_All_2.getText().toString();String Now_0 = et_Now_0.getText().toString();String Now_1 = et_Now_1.getText().toString();String Now_2 = et_Now_2.getText().toString();String Last_All = et_Last_All.getText().toString();    ///被子的容量String Last_Now = et_Last_Now.getText().toString();    ///被子的水量if (All_0.equals("") || All_1.equals("") || All_2.equals("") || Now_0.equals("") || Now_1.equals("") ||Now_2.equals("") || Last_All.equals("") || Last_Now.equals("")) {Toast.makeText(this, "请把以上空白填完哪~~~不然我好难给你办事哦", Toast.LENGTH_SHORT).show();} else {try{All[0] = Integer.parseInt(All_0);All[1] = Integer.parseInt(All_1);All[2] = Integer.parseInt(All_2);Begin.Now[0] = Integer.parseInt(Now_0);Begin.Now[1] = Integer.parseInt(Now_1);Begin.Now[2] = Integer.parseInt(Now_2);full_bottle = Integer.parseInt(Last_All);water = Integer.parseInt(Last_Now);}catch (Exception e){Toast.makeText(this, "输入有误,任意空必须为阿拉伯数字", Toast.LENGTH_SHORT).show();}int flag = 0;for (int i = 0; i < 3; i++) {if (All[i] == full_bottle) {End.Now[i] = water;last_index = i;flag = 1;}}if (full_bottle < water || flag == 0) {if(flag==0&&full_bottle >=water){Toast.makeText(this, "找不到要灌水的瓶子", Toast.LENGTH_SHORT).show();} elseif(flag==1&&full_bottle <water){Toast.makeText(this, "要灌水的瓶子要爆炸了", Toast.LENGTH_SHORT).show();}else{Toast.makeText(this, "找不到瓶子,且要求的水有点过分", Toast.LENGTH_SHORT).show();}} else {//   System.out.println("hahaha  "+All[0]+" "+All[1]+"  "+All[2]+"\n");//   System.out.println("hehehe  "+Begin.Now[0]+" "+Begin.Now[1]+"  "+Begin.Now[2]+"\n");//    System.out.println("号子"+last_index+ "最后装了"+End.Now[last_index]+"\n");BFS();//   System.out.println("hahaha  "+full_bottle+"  "+water+"\n");//   Log.d("MainActivity",All_0+All_1+All_2);et_All_0.setText("");et_All_1.setText("");et_All_2.setText("");         //清空输入框。et_Now_0.setText("");et_Now_1.setText("");et_Now_2.setText("");et_Last_All.setText("");et_Last_Now.setText("");}}}}void BFS() {Queue<Node> Q;       ///建立队列,这儿建队有个好处,不用每次完了清空Q = new LinkedList<Node>();for (int i = 0; i < 101; i++)for (int j = 0; j < 101; j++)for (int k = 0; k < 101; k++)vis[i][j][k] = 0;Q.offer(Begin);vis[Begin.Now[0]][Begin.Now[1]][Begin.Now[2]] = 1;while (Q.peek() != null) {Node u = new Node(Q.poll());                            ///!!!!!//   System.out.println("w"+u.Now[0]+u.Now[1]+u.Now[2]+"w");//    System.out.println("\n\n\n");//  Q.pop();if (Sucess(u, End, last_index)) ///出口{res = u.step;//   System.out.print("\n      一共需要如下" + res + "步   \n");//   System.out.println(u.operate);String sum = "\n      一共需要如下" + res + "步   \n" + u.operate;tv_Sum.setText(sum);break;}if (u.step >= 9) {String sum = "\n   我真都不会哦   \n";tv_Sum.setText(sum);break;}for (int i = 0; i <= 2; i++)         ///三个瓶子之间倒水{for (int j = 0; j <= 2; j++) {if (i != j) {Node over = new Node(u);if (over.Now[i] >= All[j] - over.Now[j])   ///1的水比2空的部分多huozhexiangdeng{over.Now[i] = over.Now[i] - (All[j] - over.Now[j]);over.Now[j] = All[j];} else {over.Now[j] = over.Now[j] + over.Now[i];over.Now[i] = 0;}over.step = over.step + 1;String cz1 = "      把" + String.valueOf(All[i]) + "升瓶子倒到" + String.valueOf(All[j]) + "升瓶子   \n";over.operate = over.operate + cz1;if (vis[over.Now[0]][over.Now[1]][over.Now[2]] == 0) {Q.offer(over);// System.out.println(over.operate + "1号"+"\n");vis[over.Now[0]][over.Now[1]][over.Now[2]] = 1;}}}Node now = new Node(u);               ///倒空某个瓶子//   System.out.println("e"+u.Now[0]+u.Now[1]+u.Now[2]+"e");now.Now[i] = 0;now.step = now.step + 1;// PR(now);String cz = "      倒空" + String.valueOf(All[i]) + "升瓶子   \n";now.operate = now.operate + cz;//   System.out.println(now.operate + "2号"+ "\n");Q.offer(now);vis[now.Now[0]][now.Now[1]][now.Now[2]] = 1;Node now_2 = new Node(u);              ///倒满某个瓶子,其实这两段可以合成一段写的,太懒了,懒得整理now_2.Now[i] = All[i];now_2.step = now_2.step + 1;String cz_2 = "      装满" + String.valueOf(All[i]) + "升瓶子   \n";now_2.operate = now_2.operate + cz_2;//   System.out.println(now_2.operate +  "3号"+"\n");// PR(now_2);Q.offer(now_2);vis[now_2.Now[0]][now_2.Now[1]][now_2.Now[2]] = 1;}}}}

androidmanifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.a11630.waigua"><applicationandroid:allowBackup="true"android:icon="@drawable/tou"android:label="水水的外挂"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"android:label="水水的外挂"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

最后贴上我的代码完整包吧。

链接:https://pan.baidu.com/s/1Jm0eK_mylXRftda3VIlqNg 
提取码:r4cc 
复制这段内容后打开百度网盘手机App,操作更方便哦

和我的app下载地址:http://sumtudou.cn/download.html

各位发现什么问题,欢迎留言。(虽然并不会有~~~[]~( ̄▽ ̄)~*)

水量调节大师外挂___安卓版相关推荐

  1. 微信小游戏跳一跳外挂教程(安卓版)

    一.开始准备: 请将安卓手机的usb调试模式打开,>开发者选项>USB调试然后与电脑相连 运行环境(这里我是基于ubuntu中的python3环境) 安装程序所需要的所有包,进入到这个包链 ...

  2. 图片拼接大师v1.0安卓版

    软件介绍: 在手机上想合图怎么办?又找不到好用的软件,我们给大家带来一款软件:一键拼接多张图片为一张图片,一款简单而又实用的小工具,快来下载和我一起使用吧! 软件预览图: 软件版本号:1.0 软件语言 ...

  3. lbe android,lbe安全大师下载|lbe安全大师安卓版 v6.1.2559_手机天堂

    lbe安全大师官网版基于业界首创的API拦截技术,能够实时监控与拦截系统中的敏感操作,动态拦截来自已知和未知的各种威胁.避免各类吸费软件,广告软件乃至木马病毒窃取您手机内的隐私信息以及可能产生的经济损 ...

  4. 安卓手机管理_安卓手机清理大师app下载-安卓手机清理大师下载v1.0.0安卓版

    安卓手机清理大师是一款专业的安卓手机清理工具,可以帮助用户随时清理手机垃圾,除此之外,还可以在线进行手机病毒查杀,防止病毒文件入侵,拥有电池电量维护管理服务,随时查看手机充电.耗电和剩余电量情况,多种 ...

  5. cordova 安卓文件多选_安卓手机清理大师app下载-安卓手机清理大师下载v1.0.0安卓版...

    安卓手机清理大师是一款专业的安卓手机清理工具,可以帮助用户随时清理手机垃圾,除此之外,还可以在线进行手机病毒查杀,防止病毒文件入侵,拥有电池电量维护管理服务,随时查看手机充电.耗电和剩余电量情况,多种 ...

  6. android手机播放pc音乐播放器,最强手机音乐播放器?Foobar2K安卓版体验

    说到最强大的PC音乐播放器,相信很多朋友,特别是HiFi发烧友,会把选票投给Foobar2000.的确,在PC平台上,Foobar2000的优势非常巨大.例如它能够自由定制界面,虽然原生界面很简陋,但 ...

  7. android单机斗地主,单机斗地主最新安卓版

    单机斗地主最新安卓版是一款操作流畅的经典单机斗地主类游戏,妈妈再也不用担心我因为金币不够不能玩斗地主了,本作为大家提供了无限金币,让你畅玩一整天都不用担心.游戏中有各种的赛事哦,随时可参与,根据你的状 ...

  8. 千牛工作台linux版,深度商店应用千牛工作台、Discord、QQ(Linux)、新浪微博安卓版...

    深度商店收录千牛工作台.Discord.QQ(Linux).新浪微博安卓版应用,如果使用Deepin或是统信UOS操作系统,可在深度商店程序上安装它们. 1.千牛工作台 千牛工作台是阿里巴巴官方出品的 ...

  9. take android,Protake安卓版下载,Protake安卓版app v0.9 - 浏览器家园

    Protake安卓版app是一款专业级的视频拍摄工具应用,能够为广大用户带来更为强大的视频拍摄体验,更为专业化的拍摄功能的服务,能够让广大用户轻松实现电影级别的画质拍摄效果,让用户能够轻松简单的进行视 ...

  10. android 格式工厂,格式工厂app下载-格式工厂app安卓版下载[辅助工具]-华军软件园...

    格式工厂安卓版是一款十分专业和优秀.功能实用的格式转换工具,格式工厂app软件功能强大,可以将图片.音频.视频进行格式转换,不限格式,转换速度快,不改变内容,操作简单,没有广告,还有转换记录保存,非常 ...

最新文章

  1. 【转载】赠券收集问题
  2. Scanner 中next()和nexline()方法的区别
  3. matplotlib 笔记:设置x轴 y轴文字
  4. jira+mysql配置
  5. 装配图中齿轮的画法_装配图的规定画法 和特殊画法
  6. 玩转GIT系列之【git pull和git fetch的区别】
  7. arm 交叉编译找不到so_嵌入式杂谈之交叉编译
  8. 论大数据视角下的地球空间信息学的机遇与挑战
  9. Vrep之configuration space之间和pose之间距离的计算方法
  10. 手机直播app制作大揭秘之视频直播系统方案
  11. 计算机win10搜不到wifi,Win10电脑搜不到5G无线wifi信号怎么办?
  12. windows立方体桌面
  13. Codingame平台“CHUCK NORRIS”的Python实现
  14. 针对目前windows系统的所有勒索病毒补丁和安全工具
  15. 基于AntV G2实现一个通用可视化Vue插件
  16. swoole开发多人在线游戏新手教程
  17. 送书福利|少儿编程能够一玩就会吗?够胆量的家长,让孩子打卡30天玩会编程!...
  18. 详解脑的功能区域分布以及布罗德曼分区系统
  19. 解决vue+element 时间控件时间差,区域时差8小时
  20. 天上掉馅饼?英国推出全球首个无人机派送披萨服务

热门文章

  1. Photoshop抠图大决战
  2. CPU使用率查看方法
  3. excel交互式图表
  4. java SE的内容有什么_JavaSE包含哪些内容?JavaEE呢?
  5. 新建word出现页眉下划线如何解决?
  6. 儿子:特训营归来,许三多算个屁!(转)
  7. (73)C#里怎么样调用WIN API的函数时传送结构或指针对象
  8. java框架-Springmvc-quzrtz-jasperreport-pio-pdfbox-jedis
  9. mysql:列类型之Spatial
  10. 双摄像头系列原理深度剖析【转载】