我有兩套代碼。一個在CPP中,另一個在java中。這兩套代碼似乎是相同的,但他們給我不同的輸出。我在這裏完全困惑。我對cpp很陌生。請幫忙。CPP和Java給出不同的輸出
CPP代碼:
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;
int helper(vector<vector<int> > table, int i, int j) {
if (i < 0 || j < 0 || i >= 4 || j >= 4) return 0;
if (table[i][j] == 1) return 0;
if (i == 3 && j == 3) return 1;
table[i][j] = 1;
return helper(table, i, j+1) + helper(table, i+1, j) + helper(table, i, j-1) + helper(table, i-1, j);
}
int main(int argc, char *argv[]) {
vector<vector<int> > table;
vector<int> x(4,0);
for (int i = 0; i < 4; ++i)
table.push_back(x);
cout << helper(table, 0, 0) << endl;
return 0;
}
輸出:184 鏈接:http://cpp.sh/2xeee
Java代碼:
public class Solution{
int helper(int[][] table, int i, int j) {
if (i < 0 || j < 0 || i >= 4 || j >= 4) return 0;
if (table[i][j] == 1) return 0;
if (i == 3 && j == 3) return 1;
table[i][j] = 1;
return helper(table, i, j+1) + helper(table, i+1, j) + helper(table, i, j-1) + helper(table, i-1, j);
}
public static void main(String[] args){
int[][] table=new int[4][4];
for(int i=0; i<4; i++)
for(int j=0; j<4; j++) table[i][j]=0;
System.out.println(new Solution().helper(table,0,0));
}
}
輸出:2 鏈接:http://ideone.com/e.js/U9X1FX
歡迎來到Stack Overflow!請[參觀](http://stackoverflow.com/tour)以查看網站的工作原理和問題,並相應地編輯您的問題。另請參閱:[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve) –
*兩組代碼似乎都是相同的* - Java不是C++。只是因爲代碼看起來相同,事實並非如此。 – PaulMcKenzie
你不需要用零填充'table'數組的循環。 Java編號數組總是預先填充0. – Boann