「java实现dfs」java实现excel大量数据导入
今天给各位分享java实现dfs的知识,其中也会对java实现excel大量数据导入进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java实现两个时间相减,得到这个时间段是几年?不满1年的也算1年,依次类推,不满2年的算2年,
- 2、JAVA求10个景点间各个景点的最短路径 图随便话 距离随便 求代码
- 3、用java实现野人传教士过河问题
- 4、fastdfs java 怎么使用
- 5、分别用DFS和BFS算法给电脑设置AI(JAVA)
- 6、java实现二进制穷举
java实现两个时间相减,得到这个时间段是几年?不满1年的也算1年,依次类推,不满2年的算2年,
import java.text.ParseException;
import java.util.Calendar;
import java.util.Scanner;
/*
* 需求:java实现两个时间相减,得到这个时间段是几年?不满1年的也算1年,依次类推,不满2年的算2年
*
* PS:我是菜鸟,东拼四凑弄出来这个。大概思路是这样,健壮性判断和bug、优化代码就靠你自己了
*
* 健壮性判断:输入2015-5-6-7或2015-5-50此两类格式都不会报错,都出结果了
*
* 弄好之后,希望你能贴出来,私聊发给我,谢谢
*/
public class Demo3 {
public static void main(String[] args) throws ParseException {
// 键盘输入日期
Scanner in = new Scanner(System.in);
System.out.print("请输入时间,格式为【年-月-日】");
String s1 = in.next();
System.out.print("请输入另一个时间,格式为【年-月-日】");
String s2 = in.next();
// String的split方法切割字符串,返回字符串数组
String[] str_arr1 = new String[3];
str_arr1 = s1.split("-");
String[] str_arr2 = new String[3];
str_arr2 = s2.split("-");
int[] int_arr1 = new int[str_arr1.length];
int[] int_arr2 = new int[str_arr2.length];
// 字符串数组转为int数组,因为Calendar的set方法只能传int参数
toInt(int_arr1, str_arr1);
toInt(int_arr2, str_arr2);
Calendar c1 = Calendar.getInstance();
c1.set(int_arr1[0], int_arr1[1], int_arr1[2]);
Calendar c2 = Calendar.getInstance();
c2.set(int_arr2[0], int_arr2[1], int_arr2[2]);
if (c1.compareTo(c2) 0) {
offset(c1, c2);
} else {
Calendar temp = c1;
c1 = c2;
c2 = temp;
offset(c1, c2);
}
in.close();
}
private static void toInt(int[] int_arr, String[] str_arr) {
for (int i = 0; i int_arr.length; i++) {
int_arr[i] = Integer.parseInt(str_arr[i]);
}
}
// 计算偏差
public static void offset(Calendar c1, Calendar c2) {
int year = c1.get(Calendar.YEAR) - c2.get(Calendar.YEAR);
int month_year = 0, day_year = 0;
if (c1.get(Calendar.MONTH) c2.get(Calendar.MONTH)) {
month_year = 1;
} else if (c1.get(Calendar.DAY_OF_MONTH) != c2
.get(Calendar.DAY_OF_MONTH)) {
day_year = 1;
}
System.out.println("时间差有" + (year + month_year + day_year) + "年");
}
}
JAVA求10个景点间各个景点的最短路径 图随便话 距离随便 求代码
最有效,切不复杂的方法使用Breadth First Search (BFS). 基本代码如下(伪代码)。因为BFS不用递归,所以可能会有点难理解。
public Stack findPath(Vertex 起始景点, Vertex 目标景点){
Queue Vertex q = new QueueVertex();
s.enqueue(起始景点);
Vertex 当前位置;
while(!s.isEmpty()){
当前位置 = s.dequeue();
if (当前位置 == 目标景点) break;
for (每一个相邻于 当前位置 的景点 Vertex v){
if (!v.visited){
v.parent = 当前位置;
// 不是规定,不过可以节省一点时间
if (v == 目标景点){
current = v;
break;
}
s.enqueue(Vertex v);
v.visited = true;
}
}
}
Stack Vertex solution = new Stack Vertex();
Vertex parent = current;
while (parent != 起始景点){
solution.push(parent);
parent = current.parent;
}
for (graph中的每一个vertex) vertex.visited = false;
return solution(); // 其实这里建议用一个 Path 的inner class 来装所获得的路线
}
然后再 main 求每两个景点之间的距离即可
public static void main(String[] argv){
PathFinder pf = new PathFinder();
Stack[][] 路径 = new Stack[10][10];
for(int i=0; ipf.vertices.length; i++){
for(int j=i+1; jpf.vertices.length; j++){
Stack s = pf.findPath(pf.vertices[i], pf.vertices[j]);
路径[i][j] = s; 路径[j][i] = s; // 假设你的graph是一个undirected graph
}
}
// 这么一来就大功告成了!对于每两个景点n 与 m之间的最短路径就是在 stack[n][m] 中
}
还有一种方法就是用Depth First Search递归式的寻找路径,不过这样比较慢,而且我的代码可能会造成stack overflow
public Stack dfs(Vertex 当前景点,Vertex 目标景点){
if(当前景点 == 目标景点) return;
Stack solution = new Stack();
Stack temp;
for (相邻于 点钱景点 的每一个 Vertex v){
if (!v.visited){
v.visited = true;
temp = dfs(v, 目标景点);
// 抱歉,不记得是stack.size()还是stack.length()
if (solution.size() == 0) solution = temp;
else if(temp.size() solution.size()) solution = temp;
v.visited = false; 复原
}
}
return solution;
}
然后再在上述的Main中叫dfs...
参考:
用java实现野人传教士过河问题
//CrossRiverQuestion.java
import java.util.ArrayList;
import java.util.List;
public class CrossRiverQuestion {
public static void main(String[] args) {
CrossRiverQuestion q = new CrossRiverQuestion(5, 4);
q.solveQuestion();
}
private int peoNum;
private int savageNum;
private ListNode resultList = new ArrayListNode();
public ListNode solveQuestion() {
Node n = new Node(peoNum,savageNum,0,0,0,new ArrayListInteger(),0,0);
boolean dfsResult = dfs(n);
if(dfsResult) {
resultList.add(0,n);
for(Node node : resultList) {
System.out.println("左岸传教士:"+node.getLeftPeo()+"左岸野人: "+node.getLeftSavage()+" 右岸传教士: "+node.getRightPeo()+"右岸野人:"+node.getRightSavage()+"船上传教士:"+node.getOnBoatPeoNum()+"船上野人:"+node.getOnBoatSavageNum());
}
return resultList;
}
return null;
}
public CrossRiverQuestion(int peoNum, int savageNum) {
super();
this.peoNum = peoNum;
this.savageNum = savageNum;
}
private boolean dfs(Node n) {
if(n.hasVisited()) return false;
n.addCheckSum();
if(n.getLeftPeo()==0n.getLeftSavage()==0) return true;
if(n.getLeftPeo()0||n.getRightPeo()0||n.getLeftSavage()0||n.getRightSavage()0) {
return false;
}
if(n.getLeftPeo()n.getLeftSavage()n.getLeftPeo()0) return false;
if(n.getRightPeo()n.getRightSavage()n.getRightPeo()0) return false;
if(n.getCURR_STATE()==n.getStateBoatLeft()) {
Node n1 = new Node(n.getLeftPeo()-1,n.getLeftSavage()-1,n.getRightPeo()+1,n.getRightSavage()+1,n.getStateBoatRight(),n.getNodesCheckSum(),1,1);
if(dfs(n1)) {
resultList.add(0,n1);
return true;
}
Node n4 = new Node(n.getLeftPeo()-2,n.getLeftSavage(),n.getRightPeo()+2,n.getRightSavage(),n.getStateBoatRight(),n.getNodesCheckSum(),2,0);
if(dfs(n4)) {
resultList.add(0,n4);
return true;
}
Node n5 = new Node(n.getLeftPeo(),n.getLeftSavage()-2,n.getRightPeo(),n.getRightSavage()+2,n.getStateBoatRight(),n.getNodesCheckSum(),0,2);
if(dfs(n5)) {
resultList.add(0,n5);
return true;
}
}
else {
Node n6 = new Node(n.getLeftPeo(),n.getLeftSavage()+1,n.getRightPeo(),n.getRightSavage()-1,n.getStateBoatLeft(),n.getNodesCheckSum(),0,1);
if(dfs(n6)) {
resultList.add(0,n6);
return true;
}
Node n7 = new Node(n.getLeftPeo()+1,n.getLeftSavage(),n.getRightPeo()-1,n.getRightSavage(),n.getStateBoatLeft(),n.getNodesCheckSum(),1,0);
if(dfs(n7)) {
resultList.add(0,n7);
return true;
}
Node n1 = new Node(n.getLeftPeo()+1,n.getLeftSavage()+1,n.getRightPeo()-1,n.getRightSavage()-1,n.getStateBoatLeft(),n.getNodesCheckSum(),1,1);
if(dfs(n1)) {
resultList.add(0,n1);
return true;
}
Node n4 = new Node(n.getLeftPeo()+2,n.getLeftSavage(),n.getRightPeo()-2,n.getRightSavage(),n.getStateBoatLeft(),n.getNodesCheckSum(),2,0);
if(dfs(n4)) {
resultList.add(0,n4);
return true;
}
Node n5 = new Node(n.getLeftPeo(),n.getLeftSavage()+2,n.getRightPeo(),n.getRightSavage()-2,n.getStateBoatLeft(),n.getNodesCheckSum(),0,2);
if(dfs(n5)) {
resultList.add(0,n5);
return true;
}
}
return false;
}
public ListNode getResultList() {
return resultList;
}
}
Node.java
import java.util.ArrayList;
import java.util.List;
public class Node {
private ListInteger nodesCheckSum = new ArrayListInteger();
private int leftPeo;
private int rightPeo;
private int leftSavage;
private int rightSavage;
private int CURR_STATE = 0;
private int onBoatPeoNum = 0;
private int onBoatSavageNum = 0;
private final int STATE_BOAT_LEFT = 0;
private final int STATE_BOAT_RIGHT = 1;
public Node(int leftPeo, int leftSavage, int rightPeo, int rightSavage, int state, List checkSumList, int onBoatPeoNum, int onBoatSavageNum) {
this.CURR_STATE = state;
this.leftPeo = leftPeo;
this.leftSavage = leftSavage;
this.rightPeo = rightPeo;
this.rightSavage = rightSavage;
this.nodesCheckSum.addAll(checkSumList);
this.onBoatPeoNum = onBoatPeoNum;
this.onBoatSavageNum = onBoatSavageNum;
}
public int getLeftPeo() {
return leftPeo;
}
public void setLeftPeo(int leftPeo) {
this.leftPeo = leftPeo;
}
public int getRightPeo() {
return rightPeo;
}
public void setRightPeo(int rightPeo) {
this.rightPeo = rightPeo;
}
public int getLeftSavage() {
return leftSavage;
}
public void setLeftSavage(int leftSavage) {
this.leftSavage = leftSavage;
}
public int getRightSavage() {
return rightSavage;
}
public void setRightSavage(int rightSavage) {
this.rightSavage = rightSavage;
}
@Override
public String toString() {
return leftPeo+","+leftSavage+","+rightPeo+","+rightSavage+","+CURR_STATE;
}
public int getCURR_STATE() {
return CURR_STATE;
}
public void setCURR_STATE(int cURR_STATE) {
CURR_STATE = cURR_STATE;
}
public int getStateBoatLeft() {
return STATE_BOAT_LEFT;
}
public int getStateBoatRight() {
return STATE_BOAT_RIGHT;
}
public int calcCheckSum() {
return 1*getCURR_STATE()+10*getLeftPeo()+100*getLeftSavage()+1000*getRightPeo()+10000*getRightSavage();
}
public void addCheckSum() {
int checkSum = calcCheckSum();
nodesCheckSum.add(checkSum);
}
public boolean hasVisited() {
int sum = calcCheckSum();
for (Integer checkSum : nodesCheckSum) {
if(checkSum==sum) return true;
}
return false;
}
public ListInteger getNodesCheckSum() {
return nodesCheckSum;
}
public int getOnBoatPeoNum() {
return onBoatPeoNum;
}
public void setOnBoatPeoNum(int onBoatPeoNum) {
this.onBoatPeoNum = onBoatPeoNum;
}
public int getOnBoatSavageNum() {
return onBoatSavageNum;
}
public void setOnBoatSavageNum(int onBoatSavageNum) {
this.onBoatSavageNum = onBoatSavageNum;
}
}
fastdfs java 怎么使用
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.io.FilenameUtils;
import org.apache.log4j.Logger;
import org.csource.common.MyException;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class FastdfsUtils {
/** fdfs初始化文件路径 **/
private Resource r = new ClassPathResource("fdfs_client.properties");
/** 日志**/
private final static Logger LOGGER = Logger.getLogger(FastdfsUtils.class);
/**
* 文件上传
* @throws MyException
* @throws IOException
* @throws FileNotFoundException
*/
public MapString, String fileUpLoad(boolean isEmpty, InputStream inputStream, String fileName)
throws Exception {
MapString, String map = new HashMapString, String();
if (isEmpty) {
throw new Exception("");
}
ClientGlobal.init(r.getFile().getAbsolutePath());
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
StorageClient storageClient = new StorageClient(trackerServer, null);
byte[] file_buff = null;
if (inputStream != null) {
file_buff = new byte[inputStream.available()];
inputStream.read(file_buff);
}
String[] results = storageClient.upload_file(file_buff,
FilenameUtils.getExtension(fileName), null);
if (results == null) {
throw new Exception("");
}
map.put("fileType", FilenameUtils.getExtension(fileName));
map.put("original", fileName);
map.put("url", results[0] + "/" + results[1]);
map.put("state", "SUCCESS");
map.put("groupName", results[0]);
map.put("fileName", results[1]);
return map;
}
/**
* 文件下载
*/
public byte[] fileDownLoad(String groupName, String fileName) throws IOException, MyException {
ClientGlobal.init(r.getFile().getAbsolutePath());
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
StorageClient storageClient = new StorageClient(trackerServer, null);
byte[] fileBytes = storageClient.download_file(groupName, fileName);
return fileBytes;
}
/**
* 文件删除
*/
public void fileDelete(String groupName, String fileName) throws FileNotFoundException,
IOException, MyException {
ClientGlobal.init(r.getFile().getAbsolutePath());
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
StorageClient storageClient = new StorageClient(trackerServer, null);
storageClient.delete_file(groupName, fileName);
}
}
分别用DFS和BFS算法给电脑设置AI(JAVA)
有必胜策略的吧。。状态空间的上限是3^9也就是不到20000实际上没有这么多。所以直接采用BFS标记会比较好。算法的话就是填充表,把表(九个格子)填为必胜、必败,己胜,开始的时候全部标为必败,再从胜状态开始向回BFS(或者DFS也可以),己胜状态向回标的一定是败状态,必胜状态的上一状态为必败态,必败态的上一状态可能是必败或者必胜(这就是因为这家伙走错棋了所以要输!)
我的习惯。不写代码。没有意思。
java实现二进制穷举
闲着没事,给你写了一个一个DFS算法,可以枚举(a1, a2… ak),剩下的太简单,你自己写着玩吧。。。
import java.util.ArrayList;
public class DFS {
public static void main(String[] args) {
DFS dfs=new DFS();
dfs.dfs(1);
}
int sum=0;
int index=5;
ArrayListIntegerlist=new ArrayListInteger();
public void dfs(int i)
{
if(iindex)
{
sum++;
System.out.println("this is the "+sum);
for(Integer integer:this.list)
{
System.out.print(integer+" ");
}
System.out.println();
return;
}
for(int j=0;j=1;j++)
{
list.add(j);
this.dfs(i+1);
list.remove(list.size()-1);
}
}
}
关于java实现dfs和java实现excel大量数据导入的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-21,除非注明,否则均为
原创文章,转载请注明出处。