当前位置: 首页 > news >正文

上海网站制作价格又拍云存储WordPress

上海网站制作价格,又拍云存储WordPress,浙江制做网站的公司,简述网站建设的一般流程一.题目 二.思路 一看就是迷宫问题的变种,从左上角到达右下角,要解决 1.8个方向的方向向量,用dx,dy数组代表方向向量 2.要按照一个规律的数值串进行搜索0,1,2,k-1,0,1…

一.题目

二.思路

一看就是迷宫问题的变种,从左上角到达右下角,要解决

1.8个方向的方向向量,用dx,dy数组代表方向向量

2.要按照一个规律的数值串进行搜索0,1,2,k-1,0,1,2......,这个好实现只需要在dfs方法中加入一个下一个数值的参数搜索就行

3.核心减枝:斜对角线不能交叉(本题难点),这里用了一个四维数组来标记走过的对角线

(x,y)->(xx,yy)代表从对角线连线,mark[x][y][xx][yy],mark数组只用于记录对角线连线

由下图可知:

在判断是否能进行对角线连线时只需要检测mark[x][b][a][y]即可

三.代码

public static int n;public static int[] dx = {-1,-1,0,1,1,1,0,-1};//八个方向的方向向量,注意要按照题目要求public static int[] dy = {0,1,1,1,0,-1,-1,-1};public static boolean[][] mark = new boolean[11][11];//判断数组public static boolean[][][][] mark1 = new boolean[12][12][12][12];//判断是否交叉public static int[] res = new int[100];//记录答案public static boolean t;//用于记录是否有路径可以到达右下角public static void main(String[] args) {Scanner scan = new Scanner(System.in);n = scan.nextInt();int k = scan.nextInt()-1;int[][] map = new int[n+1][n+1];for(int i = 1;i<=n;i++){for(int j = 1;j<=n;j++){map[i][j] = scan.nextInt();}}mark[1][1] = true;dfs(1,1,map,k,0,1);//数据范围很小dfs暴力搜索if(t==false) System.out.println(-1);scan.close();}public static void dfs(int x,int y,int[][] map,int k,int index,int cnt)//index走了几个格子,cnt下一步数值{if(t==true) return;if(index == n*n-1&&x==n&&y==n)//说明走完了,因为是按照字典顺序进行搜索的,所以第一个结果就是字典顺序最小的结果{t = true;for(int i = 0;i<n*n-1;i++){System.out.print(res[i]);}System.out.println();return;}for(int i = 0;i<8;i++){int xx = x + dx[i];int yy = y + dy[i];if(check(xx,yy,cnt,map))//说明没有走过,并且数值满足{if(i==1||i==3||i==5||i==7)//斜线走的(x,y)->(xx,yy){if(mark1[x][yy][xx][y]==true)continue;mark1[x][y][xx][yy] = true;mark1[xx][yy][x][y] = true;}mark[xx][yy] = true;res[index] = i;//记录结果int tmp = cnt;if(cnt==k)  cnt = 0;else cnt++;dfs(xx,yy,map,k,index+1,cnt);mark[xx][yy] = false;cnt = tmp;if(i==1||i==3||i==5||i==7) {//注意只有在i为奇数时才会操作对角线,这里的作用也是减枝mark1[x][y][xx][yy] = false;mark1[xx][yy][x][y] =false;}}}}public static boolean check(int x,int y,int cnt,int[][] map)//减枝{if(x>=1&&x<=n&&y>=1&&y<=n&&mark[x][y]==false)//根据题意出现交叉的无所谓不用处理{if(map[x][y]==cnt) return true;}return false;}

http://www.dtcms.com/a/431056.html

相关文章:

  • 阿里开源 Java 诊断神器Arthas
  • 网页设计与网站建设课程设计报告哪里有市场营销培训班
  • Spring Security入门指南:为初学者打造的安全防护盾
  • 网站策划书模板装修公司怎么做免费网站
  • numpy矩阵运算
  • 让 Agent 说“机器能懂的话”——LlamaIndex 构建 Agent 的结构化输出策略
  • 网站建设栏目怎么介绍海南万宁市
  • 2009 年真题配套词汇单词笔记(考研真相)
  • 代充网站怎么做wordpress4.8.2
  • GundamSeed001
  • ESP32 IDF GET_HTTPS
  • 算法世界中的两极对话:最小化最大差值与最大化数字差异的智慧较量
  • 【含文档+PPT+源码】基于微信小程序的关爱老年人在线能力评估系统
  • 前端-JavaScript简介JavaScript模块化
  • 建设官方网站房产信息网的官网链接
  • ◆comfyUI教程◆第1章05节 详解基础工作流节点及参数功能
  • 华为铁三角:销服体系的变革方法论
  • 【数据库知识】TxSQL 主从数据库同步底层原理深度解析
  • 17zwd一起做网站百度地图怎么看沿途服务区
  • 语义场理论中的5个关键概念
  • 如何自己建立网站前端自己做博客网站
  • 812. 最大三角形面积
  • 【开题答辩全过程】以 springboot药店同城配送系统为例,包含答辩的问题和答案
  • 淘小说APP(免费阅读海量小说)
  • 自动化测试系列之pytest<一>
  • 上海自建站招聘网络营销的含义和特点
  • 闵行建设机械网站游戏开发指南
  • 30.响应式联系信息板块,采用 HTML 和 CSS | CSS 新形态设计
  • 高端营销网站建设新出的网络游戏排行榜
  • 湘潭房产网站建设wordpress自定义栏目是什么