谁能告诉我这是怎么回事?
查看原帖
谁能告诉我这是怎么回事?
1285619
cjy2011楼主2024/9/4 16:13

一个奇怪的现象:

#include<bits/stdc++.h>
using namespace std;
int n;
char c[105][105],d[105][105];
char g[8]={'0','y','i','z','h','o','n','g'};
int y[9]={0, 1,-1, 0,1, 0,-1, 1,-1};
int x[9]={0, -1,1, 1,0, -1,0, 1,-1};
void dfs1(int a,int cnt,int x1,int y1,int x2,int y2){
	if(cnt>7){
		for(int i=7;i>=1;i--){
			x1-=x2;y1-=y2;
			d[x1][y1]=g[i];
		}
		return;
	}
	if(a!=g[cnt]) return;
	if(cnt==1){
		for(int i=1;i<=8;i++){
			x1+=x[i];y1+=y[i];
			if(x1>0 && x1<=n && y1>0 && y1<=n){
				dfs1(c[x1][y1],cnt+1,x1,y1,x[i],y[i]);
			}
			x1-=x[i];y1-=y[i];
		}
	}
	else{
		x1+=x2;y1+=y2;
		if(x1>0 && x1<=n && y1>0 && y1<=n){
			dfs1(c[x1][y1],cnt+1,x1,y1,x2,y2);
		}
		x1-=x2;y1-=y2;
	}
	return;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>c[i][j];
			d[i][j]='*';
		}		
	}	
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(c[i][j]=='y'){
				dfs(1,i,j,0,0);
				dfs1(c[i][j],1,i,j,0,0);
			}
		}
	}	
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<d[i][j];
		}
		cout<<endl;
	}
	return 0;
}

这个代码的样例结果

********
g*******
n*******
o*******
h*******
z*******
i*******
y*******

然后这个代码(将上个代码改了一下)

#include<bits/stdc++.h>
using namespace std;
int n;
char c[105][105],d[105][105];
char g[8]={'0','y','i','z','h','o','n','g'};
int y[9]={0, 1,-1, 0,1, 0,-1, 1,-1};
int x[9]={0, -1,1, 1,0, -1,0, 1,-1};
void dfs(int cnt,int x1,int y1,int x2,int y2){
	if(cnt>7){
		for(int i=7;i>=1;i--){
			x1-=x2;y1-=y2;
			d[x1][y1]=g[i];
		}
		return;
	}
	if(cnt==1){
		for(int i=1;i<=8;i++){
			if(c[x1+x[i]][y1+y[i]]==g[cnt+1]){
				dfs(cnt+1,x1+x[i],y1+y[i],x[i],y[i]);
			}
		}
	}
	else{
		if(c[x1+x2][y1+y2]==g[cnt+1]){
			dfs(cnt+1,x1+x2,y1+y2,x2,y2);
		}
	}
	return;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>c[i][j];
			d[i][j]='*';
		}		
	}	
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(c[i][j]=='y'){
				dfs(1,i,j,0,0);
				dfs1(c[i][j],1,i,j,0,0);
			}
		}
	}	
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<d[i][j];
		}
		cout<<endl;
	}
	return 0;
}

样例结果为

*yizhong
*y******
**i*****
***z****
****h***
*****o**
******n*
*******g

于是我突发奇想,将两个错误 代码拼起来(两个dfs)

然后就

AC了!!!???

记录详情

神马情况?

(顺便问一下我前两个代码为什么错了)

2024/9/4 16:13
加载中...