题目:返回一个二维整数数组中最大联通子数组的和。

要求:

     文件读入数组。

 

结对开发的伙伴:

博客名:斗破2

姓名:王文奇

博客链接:http://www.cnblogs.com/qwer111/

分析:把二维数组看成一个个节点,使用深度优先遍历,递归遍历所有节点,设一个变量每访问一节点加上它的值,这个值与最大值比较,记录较大值,循环完后便是最大值。用文件输入流来读文件里存好的行列和数组。

代码: 

最大联通子数组(结对开发)
  1 //最大子数组3   求一个二维数组的最大联通子数组
  2 //王文奇 缪金敏2016/4/4
  3 #include<iostream>
  4 #include<fstream>
  5 using namespace std;
  6 #define MAX 10000
  7 
  8 int row;
  9 int col;
 10 int Graph[MAX][MAX];
 11 bool v[MAX][MAX];
 12 int MaxSum;
 13 void BFS(int r, int c, int num)
 14 {
 15     if (MaxSum < num)
 16     {
 17         MaxSum = num;
 18         //v[r][c] = true;
 19     }
 20     if (r != (row - 1))
 21     {
 22         if (v[r + 1][c] == false)
 23         {
 24             v[r + 1][c] = true;
 25             BFS(r + 1, c, Graph[r + 1][c] + num);
 26             //if (Graph1[r + 1][c] == true)
 27             v[r + 1][c] = false;
 28         }
 29     }
 30     if (r != 0)
 31     {
 32         if (v[r - 1][c] == false)
 33         {
 34             v[r - 1][c] = true;
 35             BFS(r - 1, c, Graph[r - 1][c] + num);
 36             //if (Graph1[r - 1][c] == true)
 37             v[r - 1][c] = false;
 38         }
 39     }
 40     if (c != (col - 1))
 41     {
 42         if (v[r][c + 1] == false)
 43         {
 44             v[r][c + 1] = true;
 45             BFS(r, c + 1, Graph[r][c + 1] + num);
 46             //if (Graph1[r][c + 1] == true)
 47             v[r][c + 1] = false;
 48         }
 49     }
 50     if (c != 0)
 51     {
 52         if (v[r][c - 1] == false)
 53         {
 54             v[r][c - 1] = true;
 55             BFS(r, c - 1, Graph[r][c - 1] + num);
 56             //if (Graph1[r][c-1] == true)
 57             v[r][c - 1] = false;
 58         }
 59     }
 60 }
 61 
 62 int main()
 63 {
 64     MaxSum = 0;
 65     char a[20];
 66     cout << "请输入要读入的文件名与地址(如:D:\\test.txt):";
 67     cin >> a;
 68     ifstream infile;
 69     infile.open(a, ios::in);
 70     if (infile.is_open() == false)
 71     {
 72         cerr << "open error!" << endl;
 73         exit(1);
 74     }
 75 
 76 //    cout << "请分别输入二维数组的行数和列数:";
 77     infile >> row;
 78     infile >> col;
 79 //    cin >> row >> col;
 80 //    cout << "请输入二维数组数据:\n";
 81     for (int i = 0; i < row; i++)
 82     {
 83         for (

相关文章:

  • 2021-09-05
  • 2022-02-26
  • 2022-01-28
  • 2021-09-29
猜你喜欢
  • 2021-11-13
  • 2021-08-15
  • 2021-10-08
  • 2021-08-09
相关资源
相似解决方案