样例没过,请各位大佬帮忙看看是哪里有错
查看原帖
样例没过,请各位大佬帮忙看看是哪里有错
164955
EMTsaiko楼主2020/10/4 22:11

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;

int dirx[4] = { -1, 0, 1, 0};
int diry[4] = { 0, 1 ,0, -1};
int c[2],f[2];//C与F的坐标储存
char mmap[10+10][10+10],visc[10+10][10+10],visf[10+10][10+10];//地图和C,F的死循环标记数组


int main() {
	queue<char> walk;
	
	for(int i=0;i<10;i++)
		for(int j=0;j<10;j++){
			cin >>mmap[i][j];
			if(	mmap[i][j]=='C'){
				c[0]=i;
				c[1]=j;
			}
		 	else if (mmap[i][j]=='F'){
		 		f[0]=i;
				f[1]=j;
			}
		}
	for(int i=0;i<10;i++)
		for(int j=0;j<10;j++){
			visc[i][j]=-1;
			visf[i][j]=-1;
		}
			
		
	walk.push('C');
	walk.push('F');	
	int cd=0,fd=0,cnt=0;
	 
	while ( walk.front() && cnt<=100 ){
		if( walk.front()=='C'){
			if( mmap[c[0]+dirx[cd]][c[1]+diry[cd]] !='*' && 0<=c[0]+dirx[cd] &&c[0]+dirx[cd]<10 && 0<=c[1]+diry[cd]&&c[1]+diry[cd]<10 ){
								
				c[0]+=dirx[cd];
				c[1]+=diry[cd];
			}
			else {
				cd++;
				cd%=4;
			}
			//judge loop C
			if( visc[c[0]][c[1]] == cd ){
				printf("C:%d %d dir:%d\n",c[0],c[1], visc[c[0]][c[1]]);
				cnt=0;
				break;
			}
			else if( visc[c[0]][c[1]]==-1 )
			printf("%d\n",visc[c[0]][c[1]]);
				visc[c[0]][c[1]]=cd;
				
			walk.push('C');	
		}
		
		else if( walk.front()=='F' ){
			if( mmap[f[0]+dirx[fd]][f[1]+diry[fd]] !='*' && 0<=f[0]+dirx[fd]&&f[0]+dirx[fd]<10 && 0<=f[1]+diry[fd]&&f[1]+diry[fd]<10 ){
				
				f[0]+=dirx[fd];
				f[1]+=diry[fd];
			}
			else {
				fd++;
				fd%=4;
			}
			//judge loop F
			if( visf[f[0]][f[1]]== fd ){
				cnt=0;
				break;
			}
			else if( visf[f[0]][f[1]]==-1 )
				visf[f[0]][f[1]]=fd;
				
			walk.push('F');	
			cnt++;	
		}
		walk.pop();
	
		if( c[0]==f[0] && c[1]==f[1] )
			break;			
	}
	
	printf("%d\n",cnt);
	
	return 0;
}


运行样例是41

2020/10/4 22:11
加载中...