1. 程式人生 > 其它 >Java計算一個數的平方根(即:根號)

Java計算一個數的平方根(即:根號)

技術標籤:資料結構資料結構java

稀疏陣列

  • 如果我們需要做一個圍棋遊戲,那是它的棋盤就得用二維陣列來做,當棋手需要暫停棋局是,我們就需要把棋盤原封不動的儲存起來,這個時候如果用二維陣列儲存的話,會佔用大量的資源,比如黑子為1,白子為2,沒有棋子的位置就為0,當棋盤中大部分都是空白時,我們就可以使用稀疏陣列這種資料結構來儲存以便節省資源
  1. 首先得有一個二維陣列(棋盤),並有一些棋子,獲取這些棋子的數量
      //建立一個二維陣列,作為棋盤
      int[][] arr1 = new int[11][11];
      //創造兩顆棋子,1為黑子,2為白子
      arr1[1][2] = 1;
      arr1[
    2][3] = 2; arr1[3][4] = 1; arr1[3][5] = 2; //獲取棋子數量 int sum = 0; for (int i = 0; i < arr1.length; i++) { for (int j = 0; j < arr1[i].length; j++) { if (arr1[i][j] != 0){ sum++; } } } System.out.println("sum = "+sum);

在這裡插入圖片描述

2.這個時候就用稀疏陣列

來儲存

  • 稀疏陣列的第一行儲存二維陣列的所有行,所有列和所有值的個數(也就是棋盤的大小及棋子的數量)
  • 其他行就儲存資料的位置(棋子的位置)
  • 稀疏陣列格式
    所有行所有列所有值的個數
//稀疏陣列
  int[][] sparseArr = new int[sum+1][3];
  //稀疏陣列的第一行為二維陣列的所有行,所有列,所有值
  sparseArr[0][0] = arr1.length;
  sparseArr[0][1] = arr1[0].length;
  sparseArr[0][2] = sum;

  //給稀疏陣列賦值,二維陣列中的值所在的位置
  int count=0;//稀疏陣列的行數
for (int i = 0; i < arr1.length; i++) { for (int j = 0; j < arr1[i].length; j++) { if (arr1[i][j] != 0){ count++;//行數自增 sparseArr[count][0] = i; sparseArr[count][1] = j; sparseArr[count][2] = arr1[i][j]; } } } System.out.println("--------稀疏陣列----------"); for (int[] row:sparseArr){ System.out.printf("%d\t%d\t%d\n",row[0],row[1],row[2]); }

在這裡插入圖片描述

3.那棋手們回來要接著下,這個時候就需要恢復棋局,怎麼恢復呢?

  • 首先,根據稀疏陣列的第一行資料創建出怎個棋盤
  • 在根據座標用遍歷的方式把棋子加回去
  • 注意:除去第一行資料,所以遍歷的時候索引從1開始
  //稀疏陣列恢復為二維陣列
  //1.根據稀疏陣列第一行資料創建出二維陣列
  int[][] arr2 = new int[sparseArr[0][0]][sparseArr[0][1]];
  for (int i = 1; i < sparseArr.length; i++) {
      //將稀疏陣列中除了第一行之外的資料賦給二維陣列
      arr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
  }

  //輸出
  System.out.println("--------恢復後的二維陣列---------");
  for (int[] row:arr2){
      for (int item:row){
          System.out.printf("%d\t",item);
      }
      System.out.println();
  }

在這裡插入圖片描述

4.搞定收工。