为什么runtime error啊?

高艺婕 edited 7 月,4 周前

w

#include <string>
#include <iostream>
#include <sstream>
#include <algorithm>
using namespace std;


int DFS(int i, int j, bool **visited, string **a, int row, int column, int &sum){
    visited[i][j]=true;
    int k, m;
    k=i-1;
    m=j;
    if(0<=k && k<row && 0<=m && m<column && visited[k][m]==false && a[k][m]=="*"){
        sum++;
        DFS(k, m, visited, a, row, column, sum);
    }
    k=i+1;
    m=j;
    if(0<=k && k<row && 0<=m && m<column && visited[k][m]==false && a[k][m]=="*"){
        sum++;
        DFS(k, m, visited, a, row, column, sum);
    }
    k=i;
    m=j-1;
    if(0<=k && k<row && 0<=m && m<column && visited[k][m]==false && a[k][m]=="*"){
        sum++;
        DFS(k, m, visited, a, row, column, sum);
    }
    k=i;
    m=j+1;
    if(0<=k && k<row && 0<=m && m<column && visited[k][m]==false && a[k][m]=="*"){
        sum++;
        DFS(k, m, visited, a, row, column, sum);
    }
    return sum;
}
int main(){
    int max_sum=0;
    int row, column;
    cin>>column>>row;
    cin.get();
    string **a = new string*[row];
    for(int j=0; j<row; j++){
        a[j] = new string[column];
    }
    for(int i=0; i<row; i++){
        for(int j=0; j<column; j++){
            a[i][j]="";
        }
    }
    for(int i=0; i<row; i++){
        string temp;
        getline(cin, temp);
        int j=0;
        for(char c:temp){
            a[i][j]=c;
            j++;
        }
    }
    bool **visited = new bool*[row];
    for(int j=0; j<row; j++){
        visited[j] = new bool[column];
    }
    for(int i=0; i<row; i++){
        for(int j=0; j<column; j++){
            visited[i][j]=false;
        }
    }
    for(int i=0; i<row; i++){
        for(int j=0; j<column; j++){
            if(!visited[i][j] && a[i][j]=="*"){
                int sum = 1;
                int sum_now = DFS(i,j,visited,a,row,column,sum);
                max_sum = max(sum_now, max_sum);
            }
        }
    }
    cout<<max_sum<<endl;
    // 释放动态分配的二维数组 a
    for(int j = 0; j < row; ++j) {
        delete[] a[j]; // 释放每一行的内存
    }
    delete[] a; // 释放指向行指针的内存
    // 释放动态分配的二维数组 visited
    for(int j = 0; j < row; ++j) {
        delete[] visited[j]; // 释放每一行的内存
    }
    delete[] visited; // 释放指向行指针的内存
    return max_sum;
}

Comments