#include <stdio.h> #include <stdbool.h> #include <string.h> const int N = 9; int q[9]; bool C[9];//第j列的安全性 bool L[17]; bool R[17]; int a[9][9]; void try(int row) { for(int col = 1;col <= 8;col++) { if(C[col]&&R[row + col] && L[row-col+N] && a[col][row] == 1) { q[row] = col; C[col] = false; L[row - col + N] = false; R[row + col] = false; if(row < 8) { try(row+1); } else { for(int i = 1;i <= 8;i++) { printf("%d",q[i]); } printf("\n"); break; } //回溯:恢复三个方向的安全标记 C[col] = true; L[row - col + N] = true; R[row + col] = true; } } } int main() { for(int i = 0;i < 9;i++) { C[i] = true; } for(int j = 0;j < 17;j++) { L[j] = true; R[j] = true; } for(int i = 0;i < 9;i++) { for(int j = 0;j < 9;j++) { a[i][j] = 0; } } for(int i = 1;i <= 9;i++) { for(int j = 1;j <= 9;j++) { char h; scanf("%c",&h); if(h == '.') { a[i][j] = 1; } } } try(1); return 0; }如何解决输出前需要多次输入会车
时间: 2023-07-15 19:15:41 浏览: 200
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这个问题可以通过清空输入缓冲区来解决。在每次输入字符后,使用一个空循环来读取输入缓冲区中的多余字符,直到读取到换行符为止。具体实现如下:
```
for(int i = 1;i <= 9;i++) {
for(int j = 1;j <= 9;j++) {
char h;
scanf("%c",&h);
if(h == '.') {
a[i][j] = 1;
}
while(getchar() != '\n'); // 清空输入缓冲区
}
}
```
这样就可以保证每次输入字符时,输入缓冲区中没有多余的字符,从而避免了输出前需要多次输入的问题。
阅读全文