zoukankan      html  css  js  c++  java
  • ZOJ 1056 The Worm Turns

    原题链接

    题目大意:贪吃蛇的简化版,给出一串操作命令,求蛇的最终状态是死是活。

    解法:这条蛇一共20格的长度,所以用一个20个元素的队列表示,队列的每个元素是平面的坐标。每读入一条指令,判断其是否越界,是否咬到了自己。若都没有,把改点压入队列,front元素弹出。

    参考代码:

    #include<iostream>
    #include<queue>
    #include<string>
    using namespace std;
    
    struct Point{
    	int r;
    	int c;
    };
    
    queue<Point> worm;
    
    bool isItself(queue<Point>,Point);
    
    int main(){
    	int i,n;
    	char str[102];
    	Point temp;
    	char x;
    	while(cin>>n&&n!=0){
    		while(!worm.empty())
    			worm.pop();
    		for(i=11;i<=30;i++){
    			temp.c=i;
    			temp.r=25;
    			worm.push(temp);
    		}
    		cin>>str;
    		i=1;
    		while(i<=n){
    			x=str[i-1];
    			temp=worm.back();
    			if(x=='W'){
    				temp.c-=1;
    				if((temp.c)<1){
    					cout<<"The worm ran off the board on move "<<i<<'.'<<endl;
    					break;
    				}
    				if(isItself(worm,temp)){
    					cout<<"The worm ran into itself on move "<<i<<'.'<<endl;
    					break;
    				}
    				worm.push(temp);
    				worm.pop();
    
    			}else{
    				if(x=='E'){
    					temp.c+=1;
    					if((temp.c)>50){
    						cout<<"The worm ran off the board on move "<<i<<'.'<<endl;
    						break;
    					}
    					if(isItself(worm,temp)){
    						cout<<"The worm ran into itself on move "<<i<<'.'<<endl;
    						break;
    					}
    					worm.push(temp);
    					worm.pop();
    				}else{
    					if(x=='S'){
    						temp.r+=1;
    						if((temp.r)>50){
    							cout<<"The worm ran off the board on move "<<i<<'.'<<endl;
    							break;
    						}
    						if(isItself(worm,temp)){
    							cout<<"The worm ran into itself on move "<<i<<'.'<<endl;
    							break;
    						}
    						worm.push(temp);
    						worm.pop();
    					}else{
    						if(x=='N'){
    							temp.r-=1;
    							if((temp.r)<1){
    								cout<<"The worm ran off the board on move "<<i<<'.'<<endl;
    								break;
    							}
    							if(isItself(worm,temp)){
    								cout<<"The worm ran into itself on move "<<i<<'.'<<endl;
    								break;
    							}
    							worm.push(temp);
    							worm.pop();
    						}
    					}
    				}
    			}
    
    	
    			if(i==n)
    				cout<<"The worm successfully made all "<<n<<" moves."<<endl;
    			i++;
    		}
    	}
    	
    	return 0;
    }
    
    bool isItself(queue<Point> worm,Point p){
    	int k;
    	queue<Point> w;
    	w=worm;
    	w.pop();
    	for(k=1;k<19;k++){
    		if(w.front().r==p.r&&w.front().c==p.c)
    			return true;
    		w.pop();
    	}
    	return false;
    }
  • 相关阅读:
    点击按钮在表格的某一行下,在添加一行(HTML+JS)
    13
    12 stark组件之pop,按钮,url,页面
    11 stark组件之delete按钮、filter过滤
    解决 AttributeError: 'ForeignKey' object has no attribute 're'
    360面经
    4 django篇
    0- 26个面试经典问题回答
    如何学习??
    LeetCode
  • 原文地址:https://www.cnblogs.com/naive/p/3568751.html
Copyright © 2011-2022 走看看