关于ac代码的问题
查看原帖
关于ac代码的问题
1187575
GOODFISH__yhzf楼主2024/12/3 17:29

开O2全RE,不开O2就AC,问问原因

#include<bits/stdc++.h>
using namespace std;

int n;
char c[105][105];
bool ans[105][105]={0};
string w="yizhong";
int dfs(int i,int j,int num,int d){
	if(i<1 || i>n || j<1 || j>n){
		return 0;
	}
	if(c[i][j]==w[num-1]){
		if(num==7){
			ans[i][j]=1;
			return 1;
		}else{
			switch(d){
				case  9:
				if(dfs(i+1,j,num+1,1)){
					ans[i][j]=1;
				}if(dfs(i-1,j-1,num+1,2)){
					ans[i][j]=1;
				}if(dfs(i-1,j,num+1,3)){
					ans[i][j]=1;
				}if(dfs(i,j+1,num+1,4)){
					ans[i][j]=1;
				}if(dfs(i,j-1,num+1,5)){
					ans[i][j]=1;
				}if(dfs(i+1,j-1,num+1,6)){
					ans[i][j]=1;
				}if(dfs(i+1,j+1,num+1,7)){
					ans[i][j]=1;
				}if(dfs(i-1,j+1,num+1,8)){
					ans[i][j]=1;
				}break;
				case 1:
					if(dfs(i+1,j,num+1,d)){
						ans[i][j]=1;
						return 1;
					}else return 0;
				case 2:
					if(dfs(i-1,j-1,num+1,d)){
					ans[i][j]=1;
					return 1;
					}else return 0;
				case 3:
					if(dfs(i-1,j,num+1,d)){
						ans[i][j]=1;
						return 1;
					}else return 0;
				case 4:
					if(dfs(i,j+1,num+1,d)){
						ans[i][j]=1;
						return 1;
					}else return 0;
				case 5:
					if(dfs(i,j-1,num+1,d)){
						ans[i][j]=1;
						return 1;
					}else return 0;
				case 6:
					if(dfs(i+1,j-1,num+1,d)){
						ans[i][j]=1;
						return 1;
					}else return 0;
				case 7:
					if(dfs(i+1,j+1,num+1,d)){
						ans[i][j]=1;
						return 1;
					}else return 0;
				case 8:
					if(dfs(i-1,j+1,num+1,d)){
						ans[i][j]=1;
						return 1;
					}else return 0;
			}
		}
	}else{
		return 0;
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>c[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			dfs(i,j,1,9);
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(ans[i][j]==1){
				cout<<c[i][j];
			}else{
				cout<<"*";
			}
		}cout<<endl;
	}
	return 0;
}
2024/12/3 17:29
加载中...