「java实现dfs」java实现excel大量数据导入

博主:adminadmin 2022-12-21 10:06:11 71

今天给各位分享java实现dfs的知识,其中也会对java实现excel大量数据导入进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

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大量数据导入的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-21,除非注明,否则均为首码项目网原创文章,转载请注明出处。