int main() { SqStack s; int n; printf("请输入需要解决几皇后问题...\n"); scanf("%d", &n); printf(" %d皇后问题求解如下:\n", n); queen(n,s); printf("\n"); system("pause"); return 0; }
时间: 2024-03-18 12:45:43 浏览: 34
这段代码是一个求解 n 皇后问题的程序。它使用了栈来存储每个皇后的位置,实现了回溯算法来搜索所有可能的解。用户需要输入一个正整数 n,表示需要解决 n 皇后问题。程序会输出所有的解,每一行表示一种解,每个数字表示该行皇后所在的列数。程序最后使用 system("pause") 命令来等待用户按任意键关闭程序窗口。
相关问题
#include<stdio.h> typdef struct SqStack{ int *base; int *top; int stacksize; }SqStack void InitStack(SqStack*s){ (*S).base=(int*)malloc(MAXSIZE*sizeof(int)); s->top=S->base; s->stacksize=MAXSIZE; } void Push(SqStack*S,int e){ *(S->top)=e; S->top++; } int Pop(SqStack*S,int e){ S->top=S->top-1; e=*(S->top); return e; } int StackEmpty(SqStack*S){ if(S->top==S->base) return 1; else return 0; } int main(){ int N; int e; SqStack S; InitStack(&S); printf("Please input N:"); scanf("%d",&N); while(N){ Push(&S,N%8); N=N/8; } while(!StackEmpty(&S)){ e=Pop(&S,e); printf("%d",e); } return 0; }改下bug
在函数Pop中,参数列表中不需要传入int e,因为这个变量是用来接收栈顶元素的,应该改为:
```c
int Pop(SqStack*S){
S->top=S->top-1;
int e=*(S->top);
return e;
}
```
另外,函数调用Pop(&S,e)中第二个参数e是多余的,应该改为:
```c
e = Pop(&S);
```
完整代码如下:
```c
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct SqStack{
int *base;
int *top;
int stacksize;
}SqStack;
void InitStack(SqStack*s){
(*s).base=(int*)malloc(MAXSIZE*sizeof(int));
s->top=s->base;
s->stacksize=MAXSIZE;
}
void Push(SqStack*S ,int e){
*(S->top)=e;
S->top++;
}
int Pop(SqStack*S){
S->top=S->top-1;
int e=*(S->top);
return e;
}
int StackEmpty(SqStack*S){
if(S->top==S->base)
return 1;
else
return 0;
}
int main(){
int N;
int e;
SqStack S;
InitStack(&S);
printf("Please input N:");
scanf("%d",&N);
while(N){
Push(&S,N%8);
N=N/8;
}
while(!StackEmpty(&S)){
e=Pop(&S);
printf("%d",e);
}
return 0;
}
```
#include<stdio.h> #include<stdlib.h> #define ElemType int #define MaxSize 100 typedef struct { ElemType date[MaxSize]; int top; }SqStack; void InitStack(SqStack *&s) { s=(SqStack *)malloc(sizeof(SqStack)); s->top=-1; } int StackEmpty(SqStack *s) { return(s->top==-1); } int Push(SqStack *&s,ElemType e) { if(s->top==MaxSize-1) return 0; s->top++; s->date[s->top]=e; return 1; } int Pop(SqStack *&s,ElemType &e) { if (s->top==-1) return 0; e=s->date[s->top]; s->top--; return 1; } int shift(int n,int r){ return n%r; } int main(){ int n,r,b,e; int i=0,j; SqStack *s; printf("请输入待转换的十进制数n:"); scanf("%d",&n); printf("请输入要转换成的目标进制基数r:"); scanf("%d",&r); if(n!=0){ n=n/r; i++; b=shift(n,r); Push(s,b); } for(j=0;j<i;j++) { Pop(s,&e); printf("结果为:%d",e); } }
这段代码实现了将十进制数转换为任意进制数的功能。具体来说,它使用了栈来存储每一位的余数,并通过不断除以目标进制基数来得到每一位的余数,最后再将栈中的元素依次弹出输出即可。
不过需要注意的是,代码中的栈没有进行初始化操作,这可能会导致程序出现异常。建议在使用栈之前,先调用 `InitStack` 函数对栈进行初始化。
阅读全文