函數走步功能的實現 即隨機步法的初步實現

很多類似的走步功能,這裏給出來了一個比較簡單的方法實現走步功能,部分代碼可以自己進行修改,初發博客,代碼格式或多或少有些不規範,而且寫的比較潦草,沒有去進行代碼優化,忘大家見諒,VS2013開發,lninux下兼容:

/****************************************************************************************************************************
函數功能:實現A-Z的隨機走步功能
作者:徐權
日期:2015-7-21
*****************************************************************************************************************************/




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


#define N 10 //定義數組寬度,測試的時候可以自行調節寬度,不同寬度需要的內存不一樣而已




int main(void)
{


int i, j, count, xq = 1, scount = 0;
int acount_first,acount_second,acount_third;//用於記錄3個不同數據,由於後續沒有優化,最先做的就是這個了,讀者可以自行優化
int asum;
int k = 0,p = 0;
char sum; //記錄變化的str[i][j]的值,用於數值交換
char str[N][N];
memset(str, '.', sizeof(str));
/*  打印初始函數   */
printf("初始函數 \n");
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%c ", str[i][j]);
}
printf("\n");
}
srand((int)time(NULL)); //隨機數隨時間變化改變


//隨機定義初始化‘A’的位置,使得每次運行結果都不一樣,初始化i和j的值
i = rand() % N;
j = rand() % N;


str[i][j] = 'A';  //初始化起始點


while (str[i][j] < 'Z')
{
count = rand() % 4;  //生成0,1,2,3 的隨機數
xq = 1; // 初始化內存循壞跳出條件
scount = 0;  //初始化外層循壞跳出循壞
//初始化隨機0,1,2,3的條件,限制避免scount數值無故增大
while (xq == 1)
{
if (((count == 0) && ((j + 1) < N)) && (str[i][j + 1] == '.'))
{
sum = str[i][j] + 1;
j++;
str[i][j] = sum;
xq++;
}
else if (((count == 1) && ((i + 1) < N)) && (str[i + 1][j] == '.'))
{
sum = str[i][j] + 1;
i++;
str[i][j] = sum;
xq++;
}
else if (((count == 2) && ((j - 1) >= 0)) && (str[i][j - 1] == '.'))
{
sum = str[i][j] + 1;
j--;
str[i][j] = sum;
xq++;
}
else if (((count == 3) && ((i - 1) >= 0)) && (str[i - 1][j] == '.'))
{
sum = str[i][j] + 1;
i--;
str[i][j] = sum;
xq++;
}
else
{
if (k == 0)//這裏是一個第一個數隨機,其餘不隨機的做法,沒有優化,最笨的方法寫出來的
{
acount_first = rand() % 4;
while (acount_first == count)
{
acount_first = rand() % 4;
}
acount_second = count;
k++;
}
else if (k == 2)
{
for (p = 0; p < 4; p++)
{
asum = (count + 1) % 4;
if ((asum != acount_first) && (asum != acount_second))
{
count = asum;
acount_third = count;
break;
}
count++;
}
}
else
{
for (p = 0; p < 4; p++)
{
asum = (count + 1) % 4;
if ((asum != acount_first) && (asum != acount_second) && (asum != acount_third))
{
count = asum;
break;
}
count++;
}
}


scount++;
if (scount == 4)
{
xq++;
}
}
}


k = 0;
if (scount == 4)
{
break;
}
}


/*  打印函數   */


puts("運行後的函數如下");


for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%c ", str[i][j]);
}
printf("\n");
}




system("pause");
return 0;
}


代碼的花括號都沒有刪掉,所以有100多行,大家可以自己優化代碼,有個代碼是幾十行就解決了的,我的是草案,望大家採納和提出修改意見,如果有優化方案,可以回覆我,我會非常感謝大家了,希望各位博友共同進步,謝謝!!!

發佈了61 篇原創文章 · 獲贊 18 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章