P1135奇怪的电梯 在已经加了限制条件的情况下TLE,求助大佬
  • 板块题目总版
  • 楼主ABCode
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/3/22 21:17
  • 上次更新2023/10/28 05:54:54
查看原帖
P1135奇怪的电梯 在已经加了限制条件的情况下TLE,求助大佬
500695
ABCode楼主2022/3/22 21:17

数据9应该是 200 1 200 0 0 0 0 0 0 0 0 0......0 0 0 0(一共200个0)

我在代码中已经加入限制条件,如果目标楼层B没有别层的电梯可以到达的话,不进行DFS,直接输出-1 但是这个数据仍超时,不知道哪里出了问题

代码:

#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;

int N,A,B,k,cnt=0x3f3f,cur=0;
int a[200][200];

void dfs(int i,int visited[]){
	
	if(i==B){
		if(cur<cnt) cnt=cur;
		return;
	}
		
	for(int j=1; j<=N; j++){	//j到达楼层 
		if(a[i][j]&&!visited[j]){
			visited[j]=1;	//访问过
			cur++;
			dfs(j,visited);
			cur--;
			visited[j]=0;
		
		}
	}
} 

int main(){
	
	scanf("%d%d%d",&N,&A,&B);
	int visited[N+1],flag=0;
	
	memset(a,0,sizeof(a));	//a[i][j] i->j是否可达
	memset(visited,0,sizeof(visited));
	
	
	for(int i=1; i<=N; i++){
		scanf("%d",&k);
		if(i+k<N+1&&k)		a[i][i+k]=1;
		if(i-k>0&&k) 	a[i][i-k]=1;
	}
	
	//任何楼层都到达不了B 
	for(int i=1; i<=N; i++){
		if(a[i][B]==1){
			flag=1;
			break;
		}
	}
	
	//有楼层可以到达B 
	if(flag){
		dfs(A,visited);
	}
	
	if(cnt==0x3f3f)
	printf("-1");
	else
	printf("%d",cnt);		
		
} 
2022/3/22 21:17
加载中...