Toj 3984. I guess the gift is an ipad!

链接 : http://acm.tju.edu.cn/toj/showp3984.html
有问题联系:QQ 970026607
题目大意: 贪吃蛇的游戏,吃了就变长,判断会不会随着时间的移动(操作),撞到墙,或者自己。

我的解法是用了一个 vector 保存之前的状态,len 表示蛇的长度,嗯,就我来代码来说,只要判断 vector[i-len+2…..i-2]之间状态就可以判断是否会撞到自己。
容易犯下的错误
这里一开始

       if(nx<=0||nx>h || ny<=0||ny>w){
                  printf("The snake crash itself after %d operations.\n",i+1);
                  goto loop1;
                  } 

被我写成

  if(nx<=0&&nx>=h && ny<=0&&ny>=w){
                  printf("The snake crash itself after %d operations.\n",i+1);
                  goto loop1;        
                  } 

还有就是吃过的食物 map[nx][ny] 没有清除标记,
导致吃了再吃。

Ac 代码如下 :
这里写图片描述

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<vector>

using namespace std;
typedef long long ll;
struct state{
  int x,y;
  state(int x1,int y1): x(x1),y(y1){}
  state(){}
}st;
bool map1[22][22];
char op[200];
vector<state> v;

int main(){
   //freopen("F:\\123.txt","r",stdin);
   int  n,w,h,x,y;
    while(scanf("%d%d%d%d%d",&n,&w,&h,&x,&y)!=EOF){


     if(n||w||h||x||y){
      memset(map1,0,sizeof(map1));
       int ux,uy;
       for(int i=0;i<n;i++)
       {
        scanf("%d%d",&ux,&uy);
        map1[ux][uy]=true;
        }
        int len=1;
          v.clear();
         scanf("%s",op);
         int num=strlen(op);
         v.push_back(state(x,y));
         int nx,ny;
         for(int i=0;i<num;i++){
            if(op[i]=='U'){
                   nx=v[i].x-1,ny=v[i].y;
                   if(nx<=0||nx>h || ny<=0||ny>w){
                  printf("The snake crash itself after %d operations.\n",i+1);
                  goto loop1;
                  }
                   if(map1[nx][ny]) {
                     map1[nx][ny]=false;
                    len++;
                   }
               for(int j=i-len+2;j<=i-1;j++){
                        if((nx==v[j].x&&ny==v[j].y)){
                  printf("The snake crash itself after %d operations.\n",i+1);
                  goto loop1;
                  }
                }
                v.push_back(state(nx,ny));
            }else if(op[i]=='D'){
                nx=v[i].x+1,ny=v[i].y;

                   if(nx<=0||nx>h || ny<=0||ny>w){
                  printf("The snake crash itself after %d operations.\n",i+1);
                  goto loop1;
                  }
                   if(map1[nx][ny]) {
                    map1[nx][ny]=false;
                    len++;
                   }
               for(int j=i-len+2;j<=i-1;j++){
                        if((nx==v[j].x&&ny==v[j].y)){
                  printf("The snake crash itself after %d operations.\n",i+1);
                  goto loop1;
                  }
                }
        v.push_back(state(nx,ny));
            }else if(op[i]=='L'){
                nx=v[i].x,ny=v[i].y-1;

                               if(nx<=0||nx>h || ny<=0||ny>w){

                  printf("The snake crash itself after %d operations.\n",i+1);
                  goto loop1;
                  }
                   if(map1[nx][ny]) {
                      map1[nx][ny]=false;
                    len++;
                   }
               for(int j=i-len+2;j<=i-1;j++){
                        if((nx==v[j].x&&ny==v[j].y)){
                  printf("The snake crash itself after %d operations.\n",i+1);
                  goto loop1;
                  }
                }
         v.push_back(state(nx,ny));
            }else {
                nx=v[i].x,ny=v[i].y+1;

                               if(nx<=0||nx>h || ny<=0||ny>w){
                  printf("The snake crash itself after %d operations.\n",i+1);
                  goto loop1;
                  }
                   if(map1[nx][ny]) {
                      map1[nx][ny]=false;
                    len++;
                   }
               for(int j=i-len+2;j<=i-1;j++){
                        if((nx==v[j].x&&ny==v[j].y)){
                  printf("The snake crash itself after %d operations.\n",i+1);
                  goto loop1;
                  }
                }
                 v.push_back(state(nx,ny));
                }
            }

         printf("The snake is %d unit long after A's operation.\n",len);

         loop1: v.clear();
     }else{
        break;
     }
    }
  return 0;
}
python023基于Python旅游景点推荐系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
JSP基于SSM网上医院预约挂号系统毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值