软件工程结对开发作业02
開發人員:
???????? 程序分析,代碼編程:信1505-1班 毛松林;
???????? 代碼復審與代碼測試:信1505-1班 張? 浩,
?
?
?
???????? 一開始看到這到題的時候,我簡直沒有一點思路。老師提示說是可以先求出所有正整數的和,然后找出不連通的整數,接著判斷不連通的整數是否可以通過某些負數與其他整數連通,如果這些負數相加的絕對值大于該正整數則要從所有整數和中減去該整數的值。從人的角度上來說這的確是一個好辦法,但是若是要用算法來實現,難度就可比登天,星期一我想了一整天也沒有實現這個方法。這其中最主要的問題就是在判斷連通性的時候,怎么設置參照物?還有怎么計算不連通的整數到連通整數組的代價?說實在的,我是沒有發現一點可用的線索。后來我有自己想了一條思路。大體想法是首先求出連成一整塊的整數的和,也就是各個連通分支的和,然后比較出連通分支中最大的值,以這個連通分支為參照物,求出其他連通分支帶該連通分支的最下代價,根據代價和連通分支的和判斷是否可以添加其它連通分支。這又出現了兩個難題,第一如何計算兩個連通分支之間的最小代價;第二,如果另外有兩個連通分支到主分支的代價都大于他們分支的和,但是這兩個分支連到一起(當然需要付出一定代價)后這個連通分支到主分支的代價小于新分支的和有怎么辦?
???????? 以上難題直到現在還沒有解決,我唯一解決了的就是如何計算一個連通分支的和。代碼如下:
public class MaxSubArray {public MaxSubArray() throws Exception {// TODO Auto-generated constructor stub }public static void main(String[] args) throws Exception {// TODO Auto-generated method stubint array[][] = inputArray();for(int i = 0; i < array.length;i++){for(int j = 0; j < array[i].length; j++)System.out.printf("%6d",array[i][j]);System.out.println();}System.out.println("*************************************************");int sum = 0;for(int i = 0; i < array.length;i ++){for(int j = 0; j < array[i].length; j++){if(array[i][j]>0&&tag[i][j]==0){int temp = branch(array,i,j);System.out.println("\t"+temp);if(sum<temp)sum = temp;}}}System.out.println("最大子數組之和為:"+sum);}//the method is to input the array from file.public static int[][] inputArray() throws Exception{File f = new File("C:/Users/acer-pc/desktop/input.txt");if(!f.exists()){System.out.println("文件不存在!");return null;}BufferedReader read = new BufferedReader(new FileReader(f));String rowstr = read.readLine();String colstr = read.readLine();int row = Integer.parseInt(rowstr);int col = Integer.parseInt(colstr);int [][] array = new int[row][col];tag = new int[row][col];for(int i = 0; i < row; i++){rowstr = read.readLine();String[] colmun = rowstr.split("[,]");for(int j = 0; j < col; j++){int col_ = Integer.parseInt(colmun[j]);array[i][j]= col_;tag[i][j] = 0;}}read.close();return array;}/*** the next method expected to calculate the max sum of each positive number.* and the element which added should include zero.*/public static int getMaxSum(int[][] array){int rows = array.length;int cols = array[0].length;int sum = 0;for(int i = 0; i < rows; i++){for(int j = 0; j < cols; j++){if(array[i][j]>=0)sum+=array[i][j];}}return sum;}/*** */public static int findWeight(int[][] array,int index_x,int index_y,int m,int n){int rows = array.length;int cols = array[0].length;int minimun=0,result = -1999999999;int[] x = {index_x-1,index_x,index_x+1,index_x};int[] y = {index_y,index_y+1,index_y,index_y-1};for(int index = 0; index < 4; index++){int i = x[index],j = y[index];if(i<0||i>=rows||j<0||j>=cols)continue;if(i==m&&j==n)minimun = -1999999999;else if(array[i][j] >= 0)minimun = 0;//array[i][j];else{minimun =array[i][j]+findWeight(array,i,j,index_x,index_y);}if(result < minimun)result = minimun;}return result;}/*** 以指定元素求該元素所在整數塊整數* @param array 原來的二維數組* @param cur_x 當前元素第一個下標* @param cur_y 第二個下標* @return*/public static int branch(int[][] array,int cur_x,int cur_y){int rows = array.length;int cols = array[0].length;int[] x = {cur_x-1,cur_x,cur_x+1,cur_x};int[] y = {cur_y,cur_y+1,cur_y,cur_y-1};int sum = array[cur_x][cur_y];System.out.print(array[cur_x][cur_y]+"\t");tag[cur_x][cur_y] = 1;for(int index = 0; index < 4; index++){int i = x[index],j = y[index];if(i<0||i>=rows||j<0||j>=cols)continue;if(array[i][j]>=0&&tag[i][j]==0){sum += branch(array,i,j);}}return sum;}private static int[][] tag; }?總結:
在我看來這次的合作開發并不成功,因為此次沒有達到題目的需求。開發過程中也就只有討論的過程了。共同分析了解題思路,但是這種思路是給人看的,算法實現不了,所以計劃只能擱淺。最后只得降低要求,計算最大整數塊的值。說起來,沒有完成任務還是很失落的。
轉載于:https://www.cnblogs.com/maosonglin/p/6679643.html
總結
以上是生活随笔為你收集整理的软件工程结对开发作业02的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2017.4.7 e.toString(
- 下一篇: Codeforces 724 G Xor