洛谷题目P5461 赦免战俘(纪念第一道递归题)
题目来源:https://www.luogu.com.cn/problem/P5461
`
int mp[1030][1030];
int k;
int k1;
void jisuan(int startn,int starn,int k) {
if (k < 0) {
return;
}
for (int i = startn;i < startn + (1 << k);i++) {
for (int j = starn;j < starn + (1 << k);j++) {
mp[i][j] = 0;
}
}
jisuan(startn + (1 << k), starn, k - 1);
jisuan(startn + (1 << k), starn + (1 << k), k - 1);
jisuan(startn, starn + (1 << k), k - 1);
}
int main() {
memset(mp, -1, sizeof(mp));
cin >> k;k1 = k;
jisuan(0, 0, k - 1);
for (int i = 0;i < (1 << k1);i++) {
for (int j = 0;j < (1 << k1);j++) {
if (mp[i][j] == -1) {
cout << 1 << " ";
}
else { cout << mp[i][j] << " "; }
}
cout << endl;
}
return 0;
}`
除去dfs之类的大模板,几乎算是我的第一道递归题了;结论是很好A,这题本来也不算太难;
主要来回出错还是在递归的函数上面,它的传入参数花了点时间,需要注意的就是横坐标和纵坐标的起始点在每一次递归的时候都会变动,而它们的终止点虽然随着传入参数k而大小固定,但是一定要加上起始点
(os:毕竟固定的是大小而不是终止点本身,,那个for循环真的要谨慎。。可能做多了就会好(?)

浙公网安备 33010602011771号