欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

慎用全局变量

程序员文章站 2024-02-15 21:52:23
...

#全局变量还敢随便乱用吗

自从讲了函数以后,本懒人就特别喜欢用全局变量,并且鼓吹同学无视全局变量的局限多用用,结果——终于,在今天,遇到了巨大的障碍!

de了一晚上bug啊,以后再也不敢用全局变量了。

题目:N皇后
有兴趣的话百度即可找到体面。

因为学校集训队之前讲过,就觉得 害代码都有了,写写就能交了——结果——

出事了。

先把之前出错的代码po上来,自勉,不能再这样沙雕了!

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
int t,arr[101],j,i,ans,cur; 

int check(int cur,int j){
	if(cur==1){
		return 1;
	}else{
	for(i=1;i<cur;i++){
		if(j==arr[i]||abs(j-arr[i])==abs(cur-i)){
			return 0;
		}
	}
	return 1;
	}

}
void dfs(int cur){
	if(cur==t+1){
		ans++;
	}
	for(j=1;j<=t;j++){
		if(check(cur,j)==1){
			arr[cur]=j;
			dfs(cur+1);
			arr[cur]=0;
		}
	}
	return;
}


int main(){
	for(;;){
		memset(arr,0,sizeof(arr));
		scanf("%d",&t);
		if(t==0){
			break;
		}
		dfs(1);
		printf("%d\n",ans);
		ans=0;
	}
} 

看起来似乎无比正确

但是

它跑出来是这样的
慎用全局变量众所周知它的正确答案应该是92

结果

出错原因竟是——“j”

该死的全局变量!

在第五次循环的时候它就出了问题。。。

后来把j改掉就过了