深度优先搜索加char缓存|只需26ms
2025-08-04 15:15:29
发布于:北京
24阅读
0回复
0点赞
使用char数组加快输出,达到超快26ms的速度,远远快于平均的100ms以上
#include <iostream>
#include <cstring>
using namespace std;
int n;
int g[10];
bool flag[10];
char buf[1024];
char* p;
void put_num(int x) {
for (int i = 0; i < 5; ++i) {
*p++ = ' ';
}
char tmp[6];
int len = 0;
if (x == 0) tmp[len++] = '0';
else {
while (x > 0) {
tmp[len++] = x % 10 + '0';
x /= 10;
}
}
for (int i = 0; i < len; ++i) {
p[-1 - i] = tmp[len - 1 - i];
}
}
void dfs(int u) {
if (u == n + 1) {
p = buf;
for (int i = 1; i <= n; ++i) {
put_num(g[i]);
}
*p++ = '\n';
cout.write(buf, p - buf);
return;
}
for (int i = 1; i <= n; ++i) {
if (!flag[i]) {
flag[i] = true;
g[u] = i;
dfs(u + 1);
flag[i] = false;
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
char cout_buf[1 << 20];
cout.rdbuf()->pubsetbuf(cout_buf, sizeof(cout_buf));
cin >> n;
dfs(1);
return 0;
}
全部评论 1
看看我的时间之刀,空间小刀,代码量小小刀:
#include<bits/stdc++.h> using namespace std; int a[10],n; string s; bool flag[10]; void dfs(int k){ if(k>n){ s=""; for(int i=1;i<=n;i++){ s+=" "; s+=a[i]; } cout<<s; cout<<"\n"; return; } for(int i=1;i<=n;i++){ if(flag[i]==false){ flag[i]=true; a[k]=i; dfs(k+1); flag[i]=false; } } } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n; dfs(1); return 0; }5天前 来自 上海
0








有帮助,赞一个