一、题目
1.原题
在一个机房中,服务器的位置标识在 n*m 的整数矩阵网格中,1 表示单元格上有服务器,0 表示没有。
如果两台服务器位于同一行或者同一列中紧邻的位置,则认为它们之间可以组成一个局域网。
请你统计机房中最大的局域网包含的服务器个数。
二、思路与代码过程
1.思路
输入n和m的大小,然后输入全是0和1的整数矩阵。
找到所有1的位置存入list,比较所有节点位置确认相邻关系(fX,bX,uY,dY),存入LinkedXY链表中,(xstack和ystack没啥实际作用,只是思维过程中的一个思路,可以删掉)。
把LinkedXY中的所有点遍历放入LinkNodejoin函数中,每一个节点都向四周查找能抵达的最多节点数,最后全部遍历完返回最大值。
LinkNodejoin函数中,每一次循环countStack都会刷新传入,在内循环中继承,每个节点都会对其相邻节点进行递归查找,直到达到LinkedXY的最后一个节点(结束条件存在问题,需要优化)。
2.代码过程
①main函数
public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入n和m的大小:"); int n = sc.nextInt(); int m = sc.nextInt(); System.out.println("请依次输入矩阵网格的值:"); int[][] matrix = new int[n][m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { matrix[i][j] = sc.nextInt(); } } SearchMax(matrix,n,m); }
②SearchMax函数
private static void SearchMax(int[][] matrix, int n, int m) { Stack<int[]> xstack = new Stack<>();// Stack<int[]> ystack = new Stack<>();// ArrayList<int []> list = new ArrayList<>(); ArrayList<LinkNode> LinkedXY = new ArrayList<>();//============= //把所有有服务器的位置都找到,存入list for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (matrix[i][j] == 1) { list.add(new int[]{i, j}); } } } if (list.size()==0) { System.out.println("当前矩阵无服务器。"); } //System.out.println(Arrays.deepToString(list.toArray())); //无遗漏比较01 02 03 12 13 23 LinkNode xnode1 = null; LinkNode xnode2 = null; LinkNode ynode1 = null; LinkNode ynode2 = null; for (int i = 0; i < list.size(); i++) { for (int j = i+1; j < list.size(); j++) { xnode1 = new LinkNode(list.get(i)[0],list.get(i)[1]); xnode2 = new LinkNode(list.get(j)[0],list.get(j)[1]); ynode1 = new LinkNode(list.get(i)[0],list.get(i)[1]); ynode2 = new LinkNode(list.get(j)[0],list.get(j)[1]); if (list.get(i)[0] == list.get(j)[0]&&Math.abs(list.get(i)[1]-list.get(j)[1])==1) { boolean exist1 = false; boolean exist2 = false; for ( LinkNode currentNode : LinkedXY) { if (currentNode.getX()==xnode1.getX() && currentNode.getY()==xnode1.getY()){ exist1 = true; xnode1=currentNode; } if (currentNode.getX()==xnode2.getX() && currentNode.getY()==xnode2.getY()){ exist2 = true; xnode2=currentNode; break; } } if (!exist1) { LinkedXY.add(xnode1); } if (!exist2) { LinkedXY.add(xnode2); } //有相邻入栈 xstack.push(list.get(i)); //若xnode1横坐标与xnode2相等,纵坐标小于xnode2,则将xnode2设为xnode1的后方 //setbXlink if(list.get(i)[1]<list.get(j)[1]) { xnode1.setbXlink(xnode2); xnode2.setfXlink(xnode1); } //若xnode1横坐标与xnode2相等,纵坐标大于xnode2,则将xnode2设为xnode1的前方 //setfXlink else if(list.get(i)[1]>list.get(j)[1]) { xnode1.setfXlink(xnode2); xnode2.setbXlink(xnode1); } //将相邻数入栈 xstack.push(list.get(j)); } else if (list.get(i)[1] == list.get(j)[1]&&Math.abs(list.get(i)[0]-list.get(j)[0])==1) { boolean exist1 = false; boolean exist2 = false; for ( LinkNode currentNode : LinkedXY) { if (currentNode.getX()==ynode1.getX() && currentNode.getY()==ynode1.getY()){ exist1 = true; ynode1=currentNode; } if (currentNode.getX()==ynode2.getX() && currentNode.getY()==ynode2.getY()){ exist2 = true; ynode2=currentNode; break; } } if (!exist1) { LinkedXY.add(ynode1); } if (!exist2) { LinkedXY.add(ynode2); } //有相邻入栈 ystack.push(list.get(i)); //若xnode1纵坐标与xnode2相等,横坐标大于xnode2,则将xnode2设为xnode1的上方 //setuYlink if(list.get(i)[0]>list.get(j)[0]) { ynode1.setuYlink(ynode2); } //若xnode1纵坐标与xnode2相等,横坐标小于xnode2,则将xnode2设为xnode1的下方 //setdYlink else if(list.get(i)[0]<list.get(j)[0]) { ynode1.setdYlink(ynode2); } //将相邻数入栈 ystack.push(list.get(j)); } } } if (xstack.isEmpty()&& ystack.isEmpty()){ System.out.println("无相邻服务器,最大局域网含1个服务器。"); } int MaxSize = 0 ; for (int i = 0; i < LinkedXY.size(); i++) { Stack<LinkNode> countStack = new Stack<>(); LinkNodejoin(LinkedXY,LinkedXY.get(i),countStack); MaxSize = Math.max(MaxSize,LinkNodejoin(LinkedXY,LinkedXY.get(i), countStack)); } System.out.println("最大长度为:"+MaxSize); }
③ LinkNodejoin函数
private static int LinkNodejoin(ArrayList<LinkNode> LinkedXY,LinkNode CountcurrentNode, Stack<LinkNode> countStack) { //当前countStack不含有之前已经存入的节点 if (!countStack.contains(CountcurrentNode)){ System.out.println("当前countStack不含有该节点,加入进来啦!"); countStack.push(CountcurrentNode); } if (CountcurrentNode==LinkedXY.get(LinkedXY.size()-1)){ return countStack.size(); } if (CountcurrentNode.fxlink!=null&&!countStack.contains(CountcurrentNode.fxlink)){ LinkNodejoin(LinkedXY, CountcurrentNode.getfXlink(),countStack); } if (CountcurrentNode.bxlink!=null&&!countStack.contains(CountcurrentNode.bxlink)){ LinkNodejoin(LinkedXY, CountcurrentNode.getbXlink(),countStack); } if (CountcurrentNode.uylink!=null&&!countStack.contains(CountcurrentNode.uylink)){ LinkNodejoin(LinkedXY, CountcurrentNode.getuYlink(),countStack); } if (CountcurrentNode.dylink!=null&&!countStack.contains(CountcurrentNode.dylink)){ LinkNodejoin(LinkedXY, CountcurrentNode.getdYlink(),countStack); } return countStack.size(); }
④LinkNode类
public static class LinkNode{ int x; int y; LinkNode fxlink;//前 LinkNode bxlink;//后 LinkNode uylink;//上 LinkNode dylink;//下 //构造函数 public LinkNode (int x, int y) { this.x = x; this.y = y; this.fxlink = null; this.bxlink = null; this.uylink = null; this.dylink = null; } //方法体 //获得x坐标 public int getX() { return x; } //设置x坐标//无用 public void setX(int x) { this.x = x; } //获得y坐标 public int getY() { return y; } //设置y坐标//无用 public void setY(int y) { this.y = y; } //获取横f向链接 public LinkNode getfXlink() { return fxlink; } //设置横f向链接 public void setfXlink(LinkNode fxlink) { this.fxlink = fxlink; } //获取横b向链接 public LinkNode getbXlink() { return bxlink; } //设置横b向链接 public void setbXlink(LinkNode bxlink) { this.bxlink = bxlink; } //获取纵u向链接 public LinkNode getuYlink() { return uylink; } //设置纵u向链接 public void setuYlink(LinkNode uylink) { this.uylink = uylink; } //获取纵d向链接 public LinkNode getdYlink() { return dylink; } //设置纵d向链接 public void setdYlink(LinkNode dylink) { this.dylink = dylink; } //获得横f向链接坐标(返回string) public String getfXlinkCoordinates(){ if (fxlink != null) { return "横前向链接的坐标:("+fxlink.getX()+","+fxlink.getY(); } else { return "无横前向链接"; } } //获得横b向链接坐标 public String getbXlinkCoordinates(){ if (bxlink != null) { return "横后向链接的坐标:("+bxlink.getX()+","+bxlink.getY(); } else { return "无横后向链接"; } } //获得纵u向链接坐标 public String getuYlinkCoordinates(){ if (uylink != null) { return "纵上向链接的坐标:("+uylink.getX()+","+uylink.getY(); }else { return "无纵上向链接"; } } //获得纵d向链接坐标 public String getdYlinkCoordinates(){ if (uylink != null) { return "纵下向链接的坐标:("+dylink.getX()+","+dylink.getY(); }else { return "无纵下向链接"; } } //自定义输出形式 public String toString(){ return "LinkNode{坐标=(" + x + ", " + y + ")" + ", 横前向链接=" + (fxlink != null ? "(" + fxlink.x + ", " + fxlink.y + ")" : "null") + ", 横后向链接=" + (bxlink != null ? "(" + bxlink.x + ", " + bxlink.y + ")" : "null") + ", 纵上向链接=" + (uylink != null ? "(" + uylink.x + ", " + uylink.y + ")" : "null") + ", 纵下向链接=" + (dylink != null ? "(" + dylink.x + ", " + dylink.y + ")" : "null") + "}\n"; } }
三、运行结果
1.运行截图
2.带数据分析运行结果
[0,0]:0 [0,1]:1 [0,2]:1 [0,3]:0
[1,0]:1 [1,1]:1 [1,2]:1 [1,3]:0
[2,0]:1 [2,1]:1 [2,2]:0 [2,3]:0
[3,0]:1 [3,1]:0 [3,2]:1 [3,3]:1
[LinkNode{坐标=(0, 1), 横前向链接=null, 横后向链接=(0, 2), 纵上向链接=null, 纵下向链接=(1, 1)}
, LinkNode{坐标=(0, 2), 横前向链接=(0, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=(1, 2)}
, LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
, LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
, LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
, LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
, LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
, LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
, LinkNode{坐标=(3, 2), 横前向链接=null, 横后向链接=(3, 3), 纵上向链接=null, 纵下向链接=null}
, LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
]
LinkNodejoin:LinkNode{坐标=(0, 1), 横前向链接=null, 横后向链接=(0, 2), 纵上向链接=null, 纵下向链接=(1, 1)}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:LinkNode{坐标=(0, 2), 横前向链接=(0, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=(1, 2)}
uy:null
dy:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
当前CountcurrentNode为LinkNode{坐标=(0, 1), 横前向链接=null, 横后向链接=(0, 2), 纵上向链接=null, 纵下向链接=(1, 1)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
bxlinkLinkNode{坐标=(0, 2), 横前向链接=(0, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=(1, 2)}
LinkNodejoin:LinkNode{坐标=(0, 2), 横前向链接=(0, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=(1, 2)}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(0, 1), 横前向链接=null, 横后向链接=(0, 2), 纵上向链接=null, 纵下向链接=(1, 1)}
bx:null
uy:null
dy:LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(0, 2), 横前向链接=(0, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=(1, 2)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
dylinkLinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
fxlinkLinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
LinkNodejoin:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
bx:LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
fxlinkLinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
LinkNodejoin:LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
uy:null
dy:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
当前CountcurrentNode为LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
dylinkLinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
LinkNodejoin:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
bxlinkLinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
dylinkLinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(0, 1), 横前向链接=null, 横后向链接=(0, 2), 纵上向链接=null, 纵下向链接=(1, 1)}
fx:null
bx:LinkNode{坐标=(0, 2), 横前向链接=(0, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=(1, 2)}
uy:null
dy:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
当前CountcurrentNode为LinkNode{坐标=(0, 1), 横前向链接=null, 横后向链接=(0, 2), 纵上向链接=null, 纵下向链接=(1, 1)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(0, 2), 横前向链接=(0, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=(1, 2)}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(0, 1), 横前向链接=null, 横后向链接=(0, 2), 纵上向链接=null, 纵下向链接=(1, 1)}
bx:null
uy:null
dy:LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(0, 2), 横前向链接=(0, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=(1, 2)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
fxlinkLinkNode{坐标=(0, 1), 横前向链接=null, 横后向链接=(0, 2), 纵上向链接=null, 纵下向链接=(1, 1)}
LinkNodejoin:LinkNode{坐标=(0, 1), 横前向链接=null, 横后向链接=(0, 2), 纵上向链接=null, 纵下向链接=(1, 1)}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:LinkNode{坐标=(0, 2), 横前向链接=(0, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=(1, 2)}
uy:null
dy:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
当前CountcurrentNode为LinkNode{坐标=(0, 1), 横前向链接=null, 横后向链接=(0, 2), 纵上向链接=null, 纵下向链接=(1, 1)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
dylinkLinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
LinkNodejoin:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
bx:LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
fxlinkLinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
LinkNodejoin:LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
uy:null
dy:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
当前CountcurrentNode为LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
dylinkLinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
LinkNodejoin:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
bxlinkLinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
dylinkLinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
bxlinkLinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(0, 2), 横前向链接=(0, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=(1, 2)}
fx:LinkNode{坐标=(0, 1), 横前向链接=null, 横后向链接=(0, 2), 纵上向链接=null, 纵下向链接=(1, 1)}
bx:null
uy:null
dy:LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(0, 2), 横前向链接=(0, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=(1, 2)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
bx:LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
fxlinkLinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
LinkNodejoin:LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
uy:null
dy:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
当前CountcurrentNode为LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
dylinkLinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
LinkNodejoin:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
bxlinkLinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
dylinkLinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
bxlinkLinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
fx:LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
bx:LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
fxlinkLinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
LinkNodejoin:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
bx:LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
fxlinkLinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
LinkNodejoin:LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
uy:null
dy:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
当前CountcurrentNode为LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
dylinkLinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
LinkNodejoin:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
bxlinkLinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
dylinkLinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
fx:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
uy:null
dy:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
当前CountcurrentNode为LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
bxlinkLinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
LinkNodejoin:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
bx:LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
bxlinkLinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(1, 2), 横前向链接=(1, 1), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
dylinkLinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
fxlinkLinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
LinkNodejoin:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
dylinkLinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
fx:null
bx:LinkNode{坐标=(1, 1), 横前向链接=(1, 0), 横后向链接=(1, 2), 纵上向链接=null, 纵下向链接=(2, 1)}
uy:null
dy:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
当前CountcurrentNode为LinkNode{坐标=(1, 0), 横前向链接=null, 横后向链接=(1, 1), 纵上向链接=null, 纵下向链接=(2, 0)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
bxlinkLinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
dylinkLinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
fx:null
bx:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
fxlinkLinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
LinkNodejoin:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前CountcurrentNode为LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
dylinkLinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
fx:LinkNode{坐标=(2, 0), 横前向链接=null, 横后向链接=(2, 1), 纵上向链接=null, 纵下向链接=(3, 0)}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(2, 1), 横前向链接=(2, 0), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
fx:null
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(3, 0), 横前向链接=null, 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(3, 2), 横前向链接=null, 横后向链接=(3, 3), 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:null
bx:LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(3, 2), 横前向链接=null, 横后向链接=(3, 3), 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
bxlinkLinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(3, 2), 横前向链接=null, 横后向链接=(3, 3), 纵上向链接=null, 纵下向链接=null}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(3, 2), 横前向链接=null, 横后向链接=(3, 3), 纵上向链接=null, 纵下向链接=null}
fx:null
bx:LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(3, 2), 横前向链接=null, 横后向链接=(3, 3), 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
1---------------------------------------
LinkNodejoin:LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
当前countStack不含有该节点,加入进来啦!
fx:LinkNode{坐标=(3, 2), 横前向链接=null, 横后向链接=(3, 3), 纵上向链接=null, 纵下向链接=null}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkNodejoin:LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
fx:LinkNode{坐标=(3, 2), 横前向链接=null, 横后向链接=(3, 3), 纵上向链接=null, 纵下向链接=null}
bx:null
uy:null
dy:null
当前CountcurrentNode为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
LinkedXY的最后一个为LinkNode{坐标=(3, 3), 横前向链接=(3, 2), 横后向链接=null, 纵上向链接=null, 纵下向链接=null}
最大长度为:8
3.带数据分析完整代码
import javax.naming.directory.SearchControls; import java.util.*; public class test25 { public static void main(String[] args) { // /* Scanner sc = new Scanner(System.in); System.out.println("请输入n和m的大小:"); int n = sc.nextInt(); int m = sc.nextInt(); System.out.println("请依次输入矩阵网格的值:"); int[][] matrix = new int[n][m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { matrix[i][j] = sc.nextInt(); } } //*/ /* 简单测试: int n = 3; int m = 2; int[][] matrix = {{0,1},{1,0},{1,1}}; //int[][] matrix = {{0,1},{1,0},{0,1}};//无相邻 */ //复杂测试: /* int n = 4; int m = 4; int[][] matrix = {{0,1,1,0},//00 01 02 03 {1,1,1,0},//10 11 12 13 {1,1,0,0},//20 21 22 23 {1,0,1,1}};//30 31 32 33 */ for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { System.out.print( "["+i+","+j+"]:"+matrix[i][j]+" "); } System.out.println(); } //System.out.println(Arrays.deepToString(matrix)); SearchMax(matrix,n,m); } private static void SearchMax(int[][] matrix, int n, int m) { Stack<int[]> xstack = new Stack<>();// Stack<int[]> ystack = new Stack<>();// ArrayList<int []> list = new ArrayList<>(); ArrayList<LinkNode> LinkedXY = new ArrayList<>();//============= //把所有有服务器的位置都找到,存入list for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (matrix[i][j] == 1) { list.add(new int[]{i, j}); } } } if (list.size()==0) { System.out.println("当前矩阵无服务器。"); } //System.out.println(Arrays.deepToString(list.toArray())); //无遗漏比较01 02 03 12 13 23 LinkNode xnode1 = null; LinkNode xnode2 = null; LinkNode ynode1 = null; LinkNode ynode2 = null; for (int i = 0; i < list.size(); i++) { for (int j = i+1; j < list.size(); j++) { //System.out.println("一 "+Arrays.toString(list.get(i))); //System.out.println("二 "+Arrays.toString(list.get(j))+"\n"); xnode1 = new LinkNode(list.get(i)[0],list.get(i)[1]); xnode2 = new LinkNode(list.get(j)[0],list.get(j)[1]); ynode1 = new LinkNode(list.get(i)[0],list.get(i)[1]); ynode2 = new LinkNode(list.get(j)[0],list.get(j)[1]); if (list.get(i)[0] == list.get(j)[0]&&Math.abs(list.get(i)[1]-list.get(j)[1])==1) { // /* boolean exist1 = false; boolean exist2 = false; for ( LinkNode currentNode : LinkedXY) { if (currentNode.getX()==xnode1.getX() && currentNode.getY()==xnode1.getY()){ exist1 = true; xnode1=currentNode; } if (currentNode.getX()==xnode2.getX() && currentNode.getY()==xnode2.getY()){ exist2 = true; xnode2=currentNode; break; } } if (!exist1) { LinkedXY.add(xnode1); } if (!exist2) { LinkedXY.add(xnode2); } // */ //有相邻入栈 xstack.push(list.get(i)); //System.out.println("横相邻的有:"); //System.out.println("三 "+list.get(i)[0]+" "+list.get(i)[1]); //System.out.println("四 "+list.get(j)[0]+" "+list.get(j)[1]); //若xnode1横坐标与xnode2相等,纵坐标小于xnode2,则将xnode2设为xnode1的后方 //setbXlink if(list.get(i)[1]<list.get(j)[1]) { xnode1.setbXlink(xnode2); xnode2.setfXlink(xnode1);//? //LinkedXY.add(xnode1); //System.out.println(LinkedXY); } //若xnode1横坐标与xnode2相等,纵坐标大于xnode2,则将xnode2设为xnode1的前方 //setfXlink else if(list.get(i)[1]>list.get(j)[1]) { xnode1.setfXlink(xnode2); xnode2.setbXlink(xnode1); //LinkedXY.add(xnode1); //System.out.println(LinkedXY); } //将相邻数入栈 xstack.push(list.get(j)); } else if (list.get(i)[1] == list.get(j)[1]&&Math.abs(list.get(i)[0]-list.get(j)[0])==1) { // /* boolean exist1 = false; boolean exist2 = false; for ( LinkNode currentNode : LinkedXY) { if (currentNode.getX()==ynode1.getX() && currentNode.getY()==ynode1.getY()){ exist1 = true; ynode1=currentNode; } if (currentNode.getX()==ynode2.getX() && currentNode.getY()==ynode2.getY()){ exist2 = true; ynode2=currentNode; break; } } if (!exist1) { LinkedXY.add(ynode1); } if (!exist2) { LinkedXY.add(ynode2); } // */ //有相邻入栈 ystack.push(list.get(i)); //System.out.println("纵相邻的有:"); //System.out.println("五 "+list.get(i)[0]+" "+list.get(i)[1]); //System.out.println("六 "+list.get(j)[0]+" "+list.get(j)[1]); //若xnode1纵坐标与xnode2相等,横坐标大于xnode2,则将xnode2设为xnode1的上方 //setuYlink if(list.get(i)[0]>list.get(j)[0]) { ynode1.setuYlink(ynode2); //LinkedXY.add(ynode1); //System.out.println(LinkedXY); } //若xnode1纵坐标与xnode2相等,横坐标小于xnode2,则将xnode2设为xnode1的下方 //setdYlink else if(list.get(i)[0]<list.get(j)[0]) { ynode1.setdYlink(ynode2); //LinkedXY.add(ynode1); //System.out.println(LinkedXY); } //将相邻数入栈 ystack.push(list.get(j)); } } } if (xstack.isEmpty()&& ystack.isEmpty()){ System.out.println("无相邻服务器,最大局域网含1个服务器。"); } System.out.println(LinkedXY); int MaxSize = 0 ; for (int i = 0; i < LinkedXY.size(); i++) { Stack<LinkNode> countStack = new Stack<>(); LinkNodejoin(LinkedXY,LinkedXY.get(i),countStack); MaxSize = Math.max(MaxSize,LinkNodejoin(LinkedXY,LinkedXY.get(i), countStack)); } System.out.println("最大长度为:"+MaxSize); } private static int LinkNodejoin(ArrayList<LinkNode> LinkedXY,LinkNode CountcurrentNode, Stack<LinkNode> countStack) { //CountcurrentNode = LinkedXY.get(i); System.out.println("LinkNodejoin:"+CountcurrentNode); //当前countStack不含有之前已经存入的节点 if (!countStack.contains(CountcurrentNode)){ System.out.println("当前countStack不含有该节点,加入进来啦!"); countStack.push(CountcurrentNode); } System.out.println("fx:"+CountcurrentNode.getfXlink()); System.out.println("bx:"+CountcurrentNode.getbXlink()); System.out.println("uy:"+CountcurrentNode.getuYlink()); System.out.println("dy:"+CountcurrentNode.getdYlink()); System.out.println("当前CountcurrentNode为"+CountcurrentNode); System.out.println("LinkedXY的最后一个为"+LinkedXY.get(LinkedXY.size()-1)); if (CountcurrentNode==LinkedXY.get(LinkedXY.size()-1)){ return countStack.size(); } System.out.println("1---------------------------------------"); if (CountcurrentNode.fxlink!=null&&!countStack.contains(CountcurrentNode.fxlink)){ System.out.println("fxlink" +CountcurrentNode.fxlink); LinkNodejoin(LinkedXY, CountcurrentNode.getfXlink(),countStack); } if (CountcurrentNode.bxlink!=null&&!countStack.contains(CountcurrentNode.bxlink)){ System.out.println("bxlink" +CountcurrentNode.bxlink); LinkNodejoin(LinkedXY, CountcurrentNode.getbXlink(),countStack); } if (CountcurrentNode.uylink!=null&&!countStack.contains(CountcurrentNode.uylink)){ System.out.println("uylink" +CountcurrentNode.uylink); LinkNodejoin(LinkedXY, CountcurrentNode.getuYlink(),countStack); } if (CountcurrentNode.dylink!=null&&!countStack.contains(CountcurrentNode.dylink)){ System.out.println("dylink" +CountcurrentNode.dylink); LinkNodejoin(LinkedXY, CountcurrentNode.getdYlink(),countStack); } //System.out.println("2---------------------------------------"); //System.out.println("当前countStack大小为:"+countStack.size()); return countStack.size(); } public static class LinkNode{ int x; int y; LinkNode fxlink;//前 LinkNode bxlink;//后 LinkNode uylink;//上 LinkNode dylink;//下 //构造函数 public LinkNode (int x, int y) { this.x = x; this.y = y; this.fxlink = null; this.bxlink = null; this.uylink = null; this.dylink = null; } //方法体 //获得x坐标 public int getX() { return x; } //设置x坐标//无用 public void setX(int x) { this.x = x; } //获得y坐标 public int getY() { return y; } //设置y坐标//无用 public void setY(int y) { this.y = y; } //获取横f向链接 public LinkNode getfXlink() { return fxlink; } //设置横f向链接 public void setfXlink(LinkNode fxlink) { this.fxlink = fxlink; } //获取横b向链接 public LinkNode getbXlink() { return bxlink; } //设置横b向链接 public void setbXlink(LinkNode bxlink) { this.bxlink = bxlink; } //获取纵u向链接 public LinkNode getuYlink() { return uylink; } //设置纵u向链接 public void setuYlink(LinkNode uylink) { this.uylink = uylink; } //获取纵d向链接 public LinkNode getdYlink() { return dylink; } //设置纵d向链接 public void setdYlink(LinkNode dylink) { this.dylink = dylink; } //获得横f向链接坐标(返回string) public String getfXlinkCoordinates(){ if (fxlink != null) { return "横前向链接的坐标:("+fxlink.getX()+","+fxlink.getY(); } else { return "无横前向链接"; } } //获得横b向链接坐标 public String getbXlinkCoordinates(){ if (bxlink != null) { return "横后向链接的坐标:("+bxlink.getX()+","+bxlink.getY(); } else { return "无横后向链接"; } } //获得纵u向链接坐标 public String getuYlinkCoordinates(){ if (uylink != null) { return "纵上向链接的坐标:("+uylink.getX()+","+uylink.getY(); }else { return "无纵上向链接"; } } //获得纵d向链接坐标 public String getdYlinkCoordinates(){ if (uylink != null) { return "纵下向链接的坐标:("+dylink.getX()+","+dylink.getY(); }else { return "无纵下向链接"; } } //自定义输出形式 public String toString(){ return "LinkNode{坐标=(" + x + ", " + y + ")" + ", 横前向链接=" + (fxlink != null ? "(" + fxlink.x + ", " + fxlink.y + ")" : "null") + ", 横后向链接=" + (bxlink != null ? "(" + bxlink.x + ", " + bxlink.y + ")" : "null") + ", 纵上向链接=" + (uylink != null ? "(" + uylink.x + ", " + uylink.y + ")" : "null") + ", 纵下向链接=" + (dylink != null ? "(" + dylink.x + ", " + dylink.y + ")" : "null") + "}\n"; } } }