首页 > 编程知识 正文

棋盘覆盖问题算法思路,残缺棋盘问题算法分析

时间:2023-05-03 15:27:37 阅读:55629 作者:1004

1、数据(date )结构(structure )是一门研究组织数据方式的学科,有了编程语言就可以形成数据结构,学好数据结构就可以写出更干净高效的代码。

2、程序=数据结构算法。

3、数据结构是算法的基础。

4、实际编程中遇到的问题:

Java代码: publicstaticvoidmain (字符串[ ] args )。

stringstr=' Java.Java.hello world!' ;

string new str=str.replace all (' Java ',' Love ' ); //字符串替换的基础算法

system.out.println (new str=' new str );

}

问:尝试导出单链表字符串和字符串节点的定义,并依次实现该定义的构造函数;计算字符串长度、分配字符串、确定两个字符串相等、求字符串、两个合并、在字符串中定位的七个成员函数。 需要指向单链表的算法

五子棋:建立二维序列,优化稀疏序列

约瑟夫问题:单向环状链表

道路工程问题:最小生成树(棱镜算法) )。

最短路径问题:弗洛伊德算法

汉诺威(分治算法)

八皇后问题:回溯法

线性结构:

1、最常用的数据结构,其特征是数据元素之间存在一对一的线性关系

2 .线性结构有两种不同的存储结构。 即依次存储结构和连锁存储结构。 顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的。

3、链接存储的线性表称为链接表,链接表的存储元素不一定连续,元素节点中存储有数据元素及相邻元素的地址信息。

4、线性结构中常见的有数组、队列、链表和堆栈。

非线性结构:

1、非线性结构包括二维排列、多维排列、广义表、树形结构、图结构。

稀疏数组:

1 .如果一个数组的大多数元素都是0,或者是相同值的数组,则可以使用稀疏数组保存该数组。

2、稀疏数组处理方法:

(1)记录排列共有几行几列,有几个不同的值?

)2)通过将具有不同值的元素的矩阵和值记录在一个小规模的数组中,缩小程序的规模。

3、二维数组向稀疏数组迁移的思考:

)1)遍历原始二维数组,得到有效数据的个数sum。

)2)可以通过sum创建稀疏阵列sparseArr int[sum 1] [3]。

)3)将二维数组的有效数据容纳到稀疏数组中。

4、稀疏数组转换为原始二维数组的思考:

(1)先读取稀疏数组的第一行,根据第一行的数据,制作原始的二维数组。 例如,上面的chessArr[2]=int[11][11]

)读取稀疏阵列中的下几行数据,并将其分配给原始二维阵列即可。

代码如下。 package com.huaze.sparsearray; publicclasssparsearray { publicstaticvoidmain (字符串[ ] args )//创建原始二维数组11*11 //0:表示没有棋子,1是黑子,2是青子接口chessArr1[1][2]=1; chessArr1[2][3]=2; //原始二维数组System.out.println ('原始二维数组:'); for(int[]row:chessarr1) for ) intdata:row ) system.out.printf('%dt ',data ); } System.out.println (;//将二维数组转换为稀疏数组//1,首先遍历二维数组,得到0以外的数据个数int sum=0; for(intI=0; i chessArr1.length; I ) for(intj=0; j 11; j () if ) chessarr1[I][j]!=0) sum; } }

//System.out.println("sum=" + sum); //2、创建对应的稀疏数组 int sparseArr[][] = new int[sum + 1][3]; //给稀疏数组赋值 sparseArr[0][0] = 11; sparseArr[0][1] = 11; sparseArr[0][2] = sum; //遍历二维数组,将非0的值存放在稀疏数组sparseArr中 int count = 0;//增加计数器计数,用于记录是第几个非0的数据 for (int i = 0; i < chessArr1.length; i++) { for (int j = 0;j < 11; j++){ if (chessArr1[i][j] != 0){ count++; sparseArr[count][0] = i; sparseArr[count][1] = j; sparseArr[count][2] = chessArr1[i][j]; } } } //输出稀疏数组的形式 System.out.println(); System.out.println("得到的稀疏数组为:"); for (int i = 0; i < sparseArr.length; i++) { System.out.printf("%dt%dt%dtn",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]); } System.out.println(); //将稀疏数组 --> 恢复成 原始的二维数组 /** * (1) 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的 chessArr[2]=int[11][11] * (2) 再读取稀疏数组的后几行的数据,并赋给原始的二维数组即可。 */ //先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组. int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]]; //再读取稀疏数组的后几行的数据(从第二行开始),并赋给原始的二维数组即可。 for (int i = 0; i < sparseArr.length; i++) { chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2]; } //恢复后的二维数组 System.out.println(); System.out.println("恢复后的二维数组:"); for (int[] row: chessArr2) { for (int data:row) { System.out.printf("%dt",data); } System.out.println(); } }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。