【发布时间】:2016-07-23 09:27:10
【问题描述】:
我需要做一个函数作为作业,给定一个由 T 和 A 组成的 char 矩阵,返回所述矩阵上的岛屿数量,在西班牙语中是 T 土地和 A 水。我能做的所有这些还有一个问题,我可以修改我作为参数给出的矩阵。我想在调用我的函数并发送新的函数之前复制矩阵,但我不能这样做。正如标题所说,我需要绝对没有任何类型的库函数(例如 strcopy)。我会传递我的代码以防万一:
int islands(char** map, int col, int row){
char** aux = map;//I don't think this line does anything
int cont = 0;
for (int i = 0; i < col; i++) {
for (int j = 0; j < row; j++) {
char c = aux[i][j];
if (aux[i][j] =='T') {
cont++;
deleteLand(aux, i,j, col, row);
}
}
}
int a = cont;
return cont;
}
void deleteLand(char** map, int t1,int t2, int col, int row) {
map[t1][t2] = 'A';
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
if (!(i==0 && j ==0)&&(t1 + i >= 0 && t1 + i < col) && (t2 + j >= 0 && t2 + j < row)) {
if (map[t1 + i][t2 + j] == 'T') {
int tc = t1+i;
int tr = t2 + j;
deleteLand(map, tc,tr,col,row);
}
}
}
}
}
以及它返回的示例: 条目:(['T','T','A' 'A','A','T' 'A','A','A' 'T','T','A'], 3, 4) 返回:2
希望它足够清楚。另外,在写这篇文章时,我意识到我可以在输入时保存矩阵的值并在退出时再次复制它,但我认为它实际上是相同的。非常感谢您提供的任何帮助
【问题讨论】:
-
矩阵通常是二维数组的同义词。像
char这样的东西是“指向char的指针”。它不能用于这样的构造。如果您需要二维数组,请使用:int (*array2d)[COLS]。 -
那不会只给我一行吗?
-
@BrunoVezoli 我需要在绝对没有库函数的情况下这样做 -- 所以没有什么能阻止你创建自己的函数库,即你自己的
strcpy等。然后在更大的程序中使用它们,而不是试图将所有这些都塞进deleteLand函数中。 -
将
aux声明为char的二维数组的C 语法为char aux[row][col];。 C 没有new运算符——那是 C++ 的东西。当然,您也标记了 C++,那么您实际使用的是哪种语言?它们是不同的。 -
char (*arr)[COLS]是一个“指向char数组的指针”(相当于char *p,它是一个“指向char”的指针)。您可以使用它来指向数组的第一个元素。现在自己想想这样一个数组的第一个元素是什么。请注意,您可以通过单个memcpy调用来复制这样的数组。malloc和free也是如此。COLS可以是局部变量或宏,例如#define COLS 100.