[問題] 二維陣列傳遞

作者: woody3724 (woody)   2016-12-08 14:20:08
最近開始寫LeetCode
題目在這: https://leetcode.com/problems/island-perimeter/
打算用C寫
我想要自己使用Dev-C來寫這題
因此會有個main()以及題目規定好的islandPerimeter()
假設我要在main裡面先建立好我的二維grid,再將此grid傳入islandPerimeter
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[4][4] = {{0,1,0,0},{1,1,1,0},{0,1,0,0},{1,1,0,0}};
islandPerimeter(arr,4,4);
.............
}
int islandPerimeter(int** grid, int gridRowSize, int gridColSize)
{
..........
}
這樣一定是錯的,置底就有說明了
因此我把main裡的grid宣告改成
int main()
{
int **arr=(int**)malloc(sizeof(int*)*4);
int i;
for(i=0;i<4;i++)
arr[i] = (int*)malloc(sizeof(int)*4);
arr[0][0]=0;
arr[0][1]=1;
arr[0][2]=0;
arr[0][3]=0;
arr[1][0]=1;
arr[1][1]=1;
arr[1][2]=1;
arr[1][3]=0;
arr[2][0]=0;
arr[2][1]=1;
arr[2][2]=0;
arr[2][3]=0;
arr[3][0]=1;
arr[3][1]=1;
arr[3][2]=0;
arr[3][3]=0;
islandPerimeter(arr,4,4);
}
雖然這樣就可以傳入islandPerimeter(),但作法卻很笨
不知道有沒有辦法在不改變
int islandPerimeter(int **grid, int gridRowSize, int gridColSize)
的情況下
在main裡面宣告好grid呢
謝謝
作者: yvb   2016-12-08 14:32:00
再加上 int *grid[4] = {array[0], ...}; 這樣如何?
作者: stupid0319 (徵女友)   2016-12-08 15:03:00
int **arr;這樣不能算二維陣列吧,犯規了
作者: steve1012 (steve)   2016-12-08 16:18:00
Leetcode 還是用c++吧..沒container很辛苦
作者: hunandy14 (Charlott.HonG)   2016-12-08 17:09:00
乾脆把二維變成一維來實作,存取在算x, y位置或者確定長度的話 可以 int* arr[len]; 這樣子的二維不知道我有沒有理解對,不太清楚你的'笨'具體定義QuQ
作者: nsc (...)   2016-12-08 21:06:00
題目就是要吃 int**,就算用二維要 submit 時還是要改回來…不如用一樓的…
作者: purpon (小強)   2016-12-08 22:20:00
用&arr. 這裡用pointer to pointer是因為這樣才能改到arr的值吧。
作者: laladeer (laladeer)   2016-12-08 22:36:00
用一維取代二維,習慣後會非常好用
作者: woody3724 (woody)   2016-12-13 14:14:00
題目就是要吃int**沒錯,一樓的方法最好,謝謝囉!

Links booklink

Contact Us: admin [ a t ] ucptt.com