c语言洛谷p1706+全排列问题
时间: 2024-01-19 09:18:02 浏览: 31
以下是C语言解决洛谷P1706全排列问题的代码示例:
```c
#include <stdio.h>
void swap(char *x, char *y) {
char temp;
temp = *x;
*x = *y;
*y = temp;
}
void permute(char *str, int l, int r) {
int i;
if (l == r) {
printf("%s\n", str);
} else {
for (i = l; i <= r; i++) {
swap((str + l), (str + i));
permute(str, l + 1, r);
swap((str + l), (str + i)); // backtrack
}
}
}
int main() {
char str[] = "ABC";
int n = strlen(str);
permute(str, 0, n - 1);
return 0;
}
```
这段代码使用了递归的方式来生成字符串的全排列。在`permute`函数中,我们首先检查是否达到了字符串的末尾,如果是,则打印当前的排列。否则,我们将当前字符与后面的字符依次交换,并递归调用`permute`函数来生成剩余字符的排列。最后,我们再次交换回来,以便进行下一次排列。
相关问题
洛谷p1161+开灯c语言
以下是洛谷p1161+开灯c语言的代码实现:
```c
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int num = 0;
while (n--) {
double a;
int t;
scanf("%lf%d", &a, &t);
for (int i = 1; i <= t; i++) {
num ^= (int)(a * i);
}
}
printf("%d", num);
return 0;
}
```
洛谷p1238+走迷宫c语言
以下是洛谷p1238+走迷宫c语言的代码示例:
```c
#include <stdio.h>
int maze[105][105]; // 迷宫地图
int n, m, t; // 迷宫的行数、列数和障碍物数量
int sx, sy, fx, fy; // 起点和终点的坐标
int ans = 0; // 记录路径数量
void dfs(int x, int y) {
if (x == fx && y == fy) { // 到达终点
ans++;
return;
}
if (x < 1 || x > n || y < 1 || y > m || maze[x][y] == 1) { // 越界或遇到障碍物
return;
}
maze[x][y] = 1; // 标记当前位置为已访问
dfs(x + 1, y); // 向下走
dfs(x - 1, y); // 向上走
dfs(x, y + 1); // 向右走
dfs(x, y - 1); // 向左走
maze[x][y] = 0; // 恢复当前位置为未访问
}
int main() {
scanf("%d %d %d %d %d %d %d", &n, &m, &t, &sx, &sy, &fx, &fy);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
maze[i][j] = 0; // 初始化迷宫地图
}
}
maze[sx][sy] = 1; // 标记起点为已访问
maze[fx][fy] = 0; // 标记终点为未访问
for (int i = 0; i < t; i++) {
int x, y;
scanf("%d %d", &x, &y);
maze[x][y] = 1; // 标记障碍物位置为已访问
}
dfs(sx, sy); // 开始深度优先搜索
printf("%d\n", ans); // 输出路径数量
return 0;
}
```