이 글은 주로 openjudge 2971: Catch the Cow의 문제 해결 과정을 다루고 있습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다.
총 시간 제한: 2000ms
메모리 제한: 65536kB
Description
농부는 소의 위치를 알고 있고 그것을 잡고 싶어합니다. 농부와 소는 모두 수직선 위에 있습니다. 농부는 N(0
1. X에서 X-1 또는 X+1로 이동하는 데는 1분이 걸립니다.
2. X에서 2*X로 이동하세요. 각 이동에는 1분이 소요됩니다.
소가 농부의 행동을 모르고 가만히 서 있다고 가정해 보세요. 농부가 소를 잡는 데 걸리는 최소 시간은 얼마입니까?
입력
두 개의 정수 N과 K
출력
정수, 농부가 소를 잡는 데 걸리는 최소 시간(분)
샘플 입력
5 17
샘플 출력
4
이 질문은 물 질문입니다. 하지만. 매우 혼란스럽습니다. 요약하면 BFS는
1이며 배열이 충분히 열려 있습니다.
2. 소와 노인의 방향이 판단됩니다.
3. 팀 합류에 대한 판단을 반복합니다.
4, 초월적 판단.
5, 좋은 성격이에요. 이것이 핵심입니다.
코드는 다음과 같습니다.
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 int x,y; 5 struct node 6 { 7 int x,times; 8 }; 9 node q[3000010]; 10 int visit[1000010]; 11 int heads=1,last=1; 12 int main() 13 { 14 scanf("%d%d",&x,&y); 15 if(y<x) 16 { 17 printf("%d",x-y); 18 return 0; 19 } 20 node a; 21 a.x=x;a.times=0; 22 q[heads]=a; 23 while(heads<=last) 24 { 25 node n=q[heads]; 26 heads++; 27 if(n.x==y) 28 { 29 printf("%d",n.times); 30 break; 31 } 32 node n1=n; 33 n1.times++; 34 n1.x+=1; 35 if(!visit[n1.x])q[++last]=n1 , visit[n1.x]=1; 36 n1.x-=2; 37 if(!visit[n1.x])q[++last]=n1 , visit[n1.x]=1; 38 n1.x+=1; 39 n1.x*=2; 40 if(n1.x<=100000&&!visit[n1.x])q[++last]=n1 , visit[n1.x]=1; 41 } 42 return 0; 43 }
단순히 창피합니다.
관련 튜토리얼: C++ 비디오 튜토리얼
위 내용은 openjudge 2971: 소 문제 해결 프로세스 파악(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!