zoukankan      html  css  js  c++  java
  • Anaconda

    #include <stdio.h>
    #include <stdlib.h>

    #define SIZE 1000
    #define THICKNESS 4
    /*
    int run_test(const char snake[SIZE][SIZE]);
    int data[SIZE+2][SIZE+2]={0};
    int run_test(const char snake[SIZE][SIZE])
    {
    for(int i=0;i<SIZE+2;i++){
    for(int j=0;j<SIZE+2;j++){
    data[i][j]=0;
    }
    }
    for(int i=0;i<SIZE;i++){
    for(int j=0;j<SIZE;j++){
    if(snake[i][j]!=0)data[i+1][j+1]++;
    }
    }
    for(int i=1;i<SIZE+1;i++){
    for(int j=1;j<SIZE+1;j++){
    if(data[i][j]==1){
    if(data[i-1][j]+data[i][j-1]+data[i+1][j]+data[i][j+1]==1)data[i][j]=11;
    }
    }
    }
    int count=11;
    bool flag=true;
    while(flag){
    flag=false;
    for(int i=1;i<SIZE+1;i++){
    for(int j=1;j<SIZE+1;j++){
    if(data[i][j]==count){
    if(data[i-1][j]==1){data[i-1][j]=count+1;flag=true;}
    if(data[i+1][j]==1){data[i+1][j]=count+1;flag=true;}
    if(data[i][j-1]==1){data[i][j-1]=count+1;flag=true;}
    if(data[i][j+1]==1){data[i][j+1]=count+1;flag=true;}
    }
    }
    }
    count++;
    }
    count=count-1;
    int z=1;
    for(int i=1;i<SIZE+1;i++){
    for(int j=1;j<SIZE+1;j++){
    if(data[i][j]==count){
    if(data[i-1][j]!=count&&data[i+1][j]!=count&&data[i][j-1]!=count&&data[i][j+1]!=count)z=1;
    else z=0;
    }
    }
    }

    return (count-10)*2-z; // the length of the longest anaconda
    }
    */
    int map[SIZE+2][SIZE+2]={0};
    int run_test(const char snake[SIZE][SIZE])
    {
    for(int i=0;i<SIZE+2;i++){
    for(int j=0;j<SIZE+2;j++){
    map[i][j]=0;
    }
    }
    for(int i=0;i<SIZE;i++){
    for(int j=0;j<SIZE;j++){
    if(snake[i][j]!=0)map[i+1][j+1]++;
    }
    }
    for(int i=1;i<SIZE+2;i++){
    for(int j=1;j<SIZE+2;j++){
    if(map[i][j]==1){
    if(map[i-1][j]+map[i+1][j]+map[i][j-1]+map[i][j+1]==1)map[i][j]=11;

    }
    }
    }
    int count=11;
    int len=0;
    bool s=true;
    while(s){
    s=false;
    for(int i=0;i<SIZE+2;i++){
    for(int j=0;j<SIZE+2;j++){
    if(map[i][j]==count){
    if(map[i-1][j]==1){map[i-1][j]=count+1;s=true;}
    if(map[i+1][j]==1){map[i+1][j]=count+1;s=true;}
    if(map[i][j-1]==1){map[i][j-1]=count+1;s=true;}
    if(map[i][j+1]==1){map[i][j+1]=count+1;s=true;}
    }
    }
    }
    count++;
    }

    count-=1;

    int z=1;
    for(int i=0;i<SIZE+2;i++){
    for(int j=0;j<SIZE+2;j++){
    if(map[i][j]==count){
    if(map[i-1][j]==count)z=0;
    if(map[i+1][j]==count)z=0;
    if(map[i][j-1]==count)z=0;
    if(map[i][j+1]==count)z=0;
    }
    }
    }
    count=2*(count-10)-z;
    return count; // the length of the longest anaconda
    }

    static char snake[10][SIZE][SIZE];

    void build_snake(void)
    {
    for (int l = 0; l < 10; l++)
    {
    for(int y = 0; y < SIZE; y++)
    for(int x = 0; x < SIZE; x++)
    snake[l][x][y] = 0;

    for (int k = 0; k < 99; k++) // limit of snakes
    {
    int flag = 1;
    int curX = (rand() % ((SIZE - THICKNESS * 10) / THICKNESS)) * THICKNESS + THICKNESS * 10;
    int curY = (rand() % ((SIZE - THICKNESS * 10) / THICKNESS)) * THICKNESS + THICKNESS * 10;

    for(int j = -10 * THICKNESS; j < 10 * THICKNESS; j++)
    for(int i = -10 * THICKNESS; i < 10 * THICKNESS; i++)
    if (snake[l][j + curX][i + curY]) flag = 0;

    if (flag)
    {
    for(int i = 0; i < SIZE / 40; i++)
    {
    int dir = rand() % 4;
    int progress = (rand() % 40) * THICKNESS + THICKNESS;

    if (dir == 0) // Right
    {
    for (; curY < progress; curY++)
    if ((snake[l][curX][curY + THICKNESS] + snake[l][curX - 1][curY + THICKNESS] +
    snake[l][curX + 1][curY + THICKNESS]))
    break;
    else
    snake[l][curX][curY] = 1;
    }
    else if (dir == 1) // Left
    {
    for (; curY > progress; curY--)
    if ((snake[l][curX][curY - THICKNESS] + snake[l][curX - 1][curY - THICKNESS] +
    snake[l][curX + 1][curY - THICKNESS]))
    break;
    else
    snake[l][curX][curY] = 1;
    }
    else if (dir == 2) // Up
    {
    for (; curX > progress; curX--)
    if ((snake[l][curX - THICKNESS][curY] + snake[l][curX - THICKNESS][curY - 1] +
    snake[l][curX - THICKNESS][curY + 1]))
    break;
    else
    snake[l][curX][curY] = 1;
    }
    else if (dir == 3) // Down
    {
    for (; curX < progress; curX++)
    if ((snake[l][curX + THICKNESS][curY] + snake[l][curX + THICKNESS][curY - 1] +
    snake[l][curX + THICKNESS][curY + 1]))
    break;
    else
    snake[l][curX][curY] = 1;
    }
    }
    }
    }
    }
    }

    void main(void)
    {
    build_snake();
    for (int count = 0; count < 10; count++)
    printf("%d ", run_test(snake[count]));
    }

  • 相关阅读:
    设置打印 页面 方向与大小
    设置对齐
    设置字体
    SVN版本管理与大型代码上线方案(一)
    项目案例之Pipeline流水线及流水线发布PHP项目(二)
    Jenkins企业应用进阶详解(一)
    iptables 防火墙(下)
    iptables 防火墙(上)
    zabbix生产环境案例(三)
    深入理解zabbix(二)
  • 原文地址:https://www.cnblogs.com/ZzznOoooo/p/6628035.html
Copyright © 2011-2022 走看看