程序提示:用二维数组表示8´8格的国际象棋棋盘。栈用顺序结构实现。 #include<iostream.h> #include<stdio.h> int line[8],answer=0; void show()//显示摆放的结果. { int i,j; for(i=0;i<8;i++) { for(j=0;j<8;j++) { if(line[i]==j) cout<<"Q"; else cout<<"*"; } cout<<endl; } answer++; cout<<endl; cout<<answer<<endl; getchar(); } int Judge(int t)//判断摆放的位置是否正确,不正确返回1,正确返回0. { int i,n=0; for(i=0;i<t;i++) { if(line[i]==line[t]) {n=1;break;} if(line[i]+i==line[t]+t) {n=1;break;} if(line[i]-i==line[t]-t) {n=1;break;} } return n; } void control(int n)//主要控制函数. { int t=8; for(line[n]=0;line[n]<t;line[n]++) { if(Judge(n)) continue; else if(n!=7) control(n+1); else show(); } } int main()//主函数. { control(0); cout<<answer<<endl; return 0; }
时间: 2023-12-05 21:03:27 浏览: 25
这段程序是用来解决八皇后问题的,通过用二维数组表示棋盘,用栈来存储每一行中皇后所在的列数,然后通过递归调用控制函数来尝试每一行中皇后的摆放位置,如果满足不在同一列,不在同一对角线的条件,就继续递归下一行,直到摆放完第八行,输出结果。程序中的 show 函数用来显示结果,Judge 函数用来判断摆放的位置是否正确,control 函数是主要的控制函数。
相关问题
string二维数组整体交换
### 回答1:
对于二维数组的交换,可以使用双重循环,逐个元素交换,例如,假设有一个二维数组A,可以这样:for(i=0;i<A.length;i++){
for(j=0;j<A[i].length;j++){
int temp = A[i][j];
A[i][j] = A[j][i];
A[j][i] = temp;
}
}
### 回答2:
要实现string二维数组整体交换,可以按照以下步骤进行操作。
1. 定义一个二维数组,用于存储字符串。假设数组名为strings,长度为n,字符串的长度为m。
2. 创建一个新的二维数组newStrings,与原数组strings的结构相同。
3. 使用两个嵌套的for循环,遍历原数组strings并将其元素复制到新数组newStrings中。循环变量i表示行数,变量j表示列数。
4. 在嵌套的for循环中,将strings[i][j]复制给newStrings[j][i],即将原数组中的每个元素按照列行交换的方式复制到新数组中。
5. 完成整个二维数组的复制后,newStrings中的元素即为交换后的数组。
6. 可以输出newStrings数组来验证交换结果是否正确。
以下为示例代码:
```python
# 定义原数组
strings = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
# 获取数组的行数和列数
n = len(strings)
m = len(strings[0])
# 创建新的二维数组
newStrings = [['' for _ in range(n)] for _ in range(m)]
# 进行数组交换
for i in range(n):
for j in range(m):
newStrings[j][i] = strings[i][j]
# 输出交换后的数组
for row in newStrings:
print(row)
```
以上代码将输出:
```
['a', 'd', 'g']
['b', 'e', 'h']
['c', 'f', 'i']
```
这就是交换后的整体二维字符串数组。
### 回答3:
要实现string二维数组的整体交换,我们可以先将数组中每个元素的顺序反转,然后再对数组的行进行反转。
假设有一个m行n列的string数组arr,首先我们可以通过两个嵌套的for循环来实现每个元素的顺序反转。具体步骤如下:
1. 遍历二维数组的每一行:
- 设置两个指针,一个指向当前行的开头,另一个指向末尾;
- 将指针所指向的元素进行交换,并向中间移动指针,直到两个指针相遇。
完成元素顺序反转后,接下来我们需要对数组的行进行反转。可以通过两个指针分别指向数组的首行和末行,然后将两行进行交换,再向中间移动指针,直到两个指针相遇。
总结起来,整个string二维数组整体交换的步骤如下:
1. 对数组中的每一行进行元素的顺序反转;
2. 对数组的行进行反转。
代码示例如下:
```cpp
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
void reverseString(string& str) {
int start = 0, end = str.size() - 1;
while (start < end) {
swap(str[start], str[end]);
start++;
end--;
}
}
void swapRows(vector<string>& arr) {
int start = 0, end = arr.size() - 1;
while (start < end) {
swap(arr[start], arr[end]);
start++;
end--;
}
}
void swapArray(vector<vector<string>>& arr) {
for (int i = 0; i < arr.size(); ++i) {
reverseString(arr[i]); // 对每一行进行元素顺序反转
}
swapRows(arr); // 对行进行反转
}
int main() {
vector<vector<string>> arr = {{"abc", "def", "ghi"},
{"jkl", "mno", "pqr"},
{"stu", "vwx", "yz"}};
swapArray(arr);
for (auto row : arr) {
for (auto str : row) {
cout << str << " ";
}
cout << endl;
}
return 0;
}
```
运行代码后,输出结果为:
yz vwx stu
pqr mno jkl
ghi def abc
以上就是实现string二维数组整体交换的方法和代码。
数据结构字符串数组实现
在C语言中,可以使用字符数组来实现字符串数组。字符数组是由连续的字符元素组成的数组,以特殊字符'\0'结尾来表示字符串的结束。通过使用字符数组,我们可以存储和操作多个字符串。下面是一个示例代码实现:
```c
#include <iostream>
#include <cstring> // 字符串库
using namespace std;
int main() {
char a << endl;
}
return 0;
}
```
以上代码实现了输入n个字符串并按输入顺序倒着输出。我们使用二维字符数组`a`来存储字符串,大小为1000。通过循环输入n个字符串到数组中,然后再通过循环倒着输出字符串。
另外,还可以通过字符串库中的函数`strlen()`来获取字符串的长度。例如,以下代码实现了获取字符串长度的示例:
```c
#include <iostream>
#include <cstring> // 字符串库
using namespace std;
int main() {
char s != '\0'; i++) { // 遍历字符串s,直到遇到'\0'
len++;
}
cout << len << endl; // 输出字符串的长度,例如len=5
int lenn = strlen(s); // 使用字符串库的strlen()函数获取字符串长度
cout << lenn;
return 0;
}
```
以上代码示例了如何使用循环遍历字符串,直到遇到特殊字符'\0',来计算字符串的长度。另外,也可以使用字符串库中的函数`strlen()`来获取字符串的长度。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
阅读全文