国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

游戲開(kāi)發(fā)中常用的算法1(20道題一篇文章)

這篇具有很好參考價(jià)值的文章主要介紹了游戲開(kāi)發(fā)中常用的算法1(20道題一篇文章)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、快速排序算法

步驟1:選取一串?dāng)?shù)字中的中心軸

步驟2:將大于中心軸的數(shù)字放在右邊

步驟3:將小于中心軸的數(shù)字放在左邊

步驟4:分別對(duì)左右兩個(gè)序列重復(fù)前三步操作

public class QuickSort : MonoBehaviour
{
    private void Start()
    {
        int[] Nums = { 4, 3, 6, 1, 8, 0, 3, 2, 5, 7};
        Sort(Nums, 0, 9);
        for (int i = 0; i < 10; i++)
        {
            Debug.Log(Nums[i]);
        }
    }
    void Sort(int[] nums,int left,int right)
    {
        //退出條件
        if (left  >= right)
            return;
        int i = left;
        int j = right;

        //中心元素取為第一個(gè)元素
        int temp = nums[left];

        while(i != j)
        {
            //從最右邊的元素開(kāi)始比較中心元素
            while(i < j && nums[j] >= temp)
            {
                j--;
            }
            if(i < j )
            {
                nums[i] = nums[j];
            }
           while(i < j && nums[i] <= temp)
            {
                i++;
            }
           if(i < j)
            {
                nums[j] = nums[i];
            }
        }
        nums[i] = temp;
        Sort(nums, left, i - 1);
        Sort(nums, i+1, right);
    }
}

二、冒泡排序算法

步驟一、從數(shù)組的最左側(cè)兩個(gè)元素進(jìn)行比較

步驟二、將較大的數(shù)向右移動(dòng),再進(jìn)行比較

步驟三、直到將最大的數(shù)字放在最右邊

步驟四、重復(fù)上述操作,不過(guò)這次比較數(shù)組的數(shù)量-1

public class BubbleSort : MonoBehaviour
{
    private void Start()
    {
        int[] array = { 6, 5, 8, 7, 1, 2, 3, 5 };
        Sort(array);
        for (int i = 0; i < array.Length; i++)
        {
            Debug.Log(array[i]);
        }
    }

    private void Sort(int[] array)
    {
        //進(jìn)行i次排序,對(duì)數(shù)組內(nèi)所有元素都進(jìn)行比較
        for (int i = 0; i < array.Length - 1; i++) 
        {
            //對(duì)某一元素進(jìn)行的相鄰元素的比較,比較次數(shù)差i次
            for(int j = 0; j < array.Length-1-i; j++)
            {
                if(array[j] > array[j+1])
                {
                    int temp = array[j];
                    //如果左邊的數(shù)字比右邊的大,就把大的數(shù)字向右平移一位
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
    }
}

三、二分查找(要求數(shù)組順序排列)

一、初始化三個(gè)序號(hào),分別代表第一個(gè),最后一個(gè)和中間序號(hào)

二、用中間序號(hào)的值和目標(biāo)值進(jìn)行對(duì)比,如果相等就返回

三、如果中間序號(hào)的值大于目標(biāo)值,就向左縮小范圍

四、如果中間序號(hào)的值小于目標(biāo)值,就向右縮小范圍

第一種實(shí)現(xiàn):常規(guī)實(shí)現(xiàn)

public class BinarySearch : MonoBehaviour
{
    private void Start()
    {
        int[] array = { 8, 11, 21, 28, 32, 43, 48, 56, 69, 72, 80, 94 };
        Debug.Log(Search(array, 80)); 
    }
    private int Search(int[] array,int key)
    {
        var min = 0;
        var max = array.Length - 1;
        var mid = 0;
        while(min <= max)
        {
            mid = (min + max) / 2;
            if(array[mid] > key)
            {
                max = mid - 1;
            }
            else if(array[mid] < key)
            {
                min = mid + 1;
            }
            else if(array[mid] == key)
            {
                return mid;
            }
        }
        return 0;
    }
}

第二種實(shí)現(xiàn):遞歸實(shí)現(xiàn)

Debug.Log(SearchTwo(array, 80,0,12));
 
private int SearchTwo(int[] array,int key,int low,int high)
    {
        if (low > high)
            return -1;
        var mid = (low + high) >> 1;
        if (array[mid] > key)
        {
            return SearchTwo(array, key, low, mid - 1);
        }
        else if (array[mid] < key)
        {
            return SearchTwo(array, key, mid + 1, high);
        }
        else
            return mid;
    }
}

四、基于四叉樹(shù)/八叉樹(shù)的碰撞檢測(cè)

五、隨機(jī)尋路算法、跟蹤算法、閃避算法(與跟蹤算法相反)

DFS(Deep First Search)、BFS(Breadth Fitst Search)

六:A*尋路算法

A*主要是利用三個(gè)數(shù)值來(lái)計(jì)算最佳路徑,分別是G代價(jià)、H代價(jià)、F代價(jià)

G:從某節(jié)點(diǎn)到開(kāi)始節(jié)點(diǎn)的移動(dòng)距離

H:從某節(jié)點(diǎn)到目標(biāo)節(jié)點(diǎn)的估計(jì)移動(dòng)距離,從任何節(jié)點(diǎn)迭代實(shí)際所需的距離大于或者等于H代價(jià)。

F:F代價(jià)等于G+H,F值越低,作為尋徑選擇就越有吸引力

我們的目標(biāo)是簡(jiǎn)單的選擇最低的F代價(jià),不斷的重復(fù),直到我們的目標(biāo)節(jié)點(diǎn)

代碼部分可以見(jiàn):

(1條消息) Unity A星(A Star/A*)尋路算法_unity尋路算法_九本才的博客-CSDN博客

現(xiàn)在有A*的尋路插件

七:B*尋路算法

理解B*可以把它想象成一個(gè)朝著目標(biāo)前進(jìn)的貪吃蛇,如果遇到障礙就會(huì)分裂成兩條蛇,一左一右繞開(kāi)障礙,只要有一條蛇碰到目標(biāo)就結(jié)束尋路

優(yōu)點(diǎn):目標(biāo)點(diǎn)在封閉空間內(nèi)時(shí),BStar效率優(yōu)勢(shì)明顯

缺點(diǎn):喜歡貼著墻走

八、Nav Mesh導(dǎo)航系統(tǒng)

NacigationMesh是一種數(shù)據(jù)結(jié)構(gòu),用于描述游戲世界的可行走表面

Navigation是Unity自帶的導(dǎo)航,具備基本的Bake,NavMesh和NavMeshAgent等基本導(dǎo)航功能

新版中有NavMeshComponent,能夠?qū)崿F(xiàn)動(dòng)態(tài)烘焙

步驟:

打開(kāi)Navgation面板、

設(shè)置烘焙參數(shù)(Bake Agent)、

設(shè)置行走區(qū)域(設(shè)置為Navigation Static)、烘焙

角色添加尋路控制器(Nav Mesh Agent)、

掛在一個(gè)腳本到Player身上,告訴目標(biāo)點(diǎn)即可

using UnityEngine;
using UnityEngine.AI;

public class Player : MonoBehaviour
{
	private NavMeshAgent agent;
	public Transform target;

	void Start()
	{
		agent = GetComponent<NavMeshAgent>();
		agent.destination = target.position;
	}
}

九、數(shù)組中僅出現(xiàn)過(guò)一次的元素

方法一:使用位異或運(yùn)算

僅針對(duì)數(shù)組中只出現(xiàn)一次的情況

使用位運(yùn)算,最后只剩下沒(méi)有重復(fù)的元素

using UnityEngine;
/// <summary>
/// 某個(gè)只出現(xiàn)一次的數(shù)字
/// 思路:采用異或操作,相同為0,不同為1
/// a^a = 0; a^0 = a;
/// </summary>
public class SingleNumber : MonoBehaviour
{
    public int[] nums = { 1, 2, 3, 2, 1 };
    private void Start()
    {
        SingleNumber1(nums);
    }
    public void SingleNumber1(int[] nums )
    {
        int result = 0;
        for(int i = 0; i < nums.Length; i++)
        {
            //第一次異或操作完了就是第一個(gè)元素,然后第一個(gè)元素和第二個(gè)元素對(duì)比
            //如果兩個(gè)相同,返回就是0,如果不相同,
            result ^= nums[i];
        }
        Debug.Log(result);
    }
}

方法二:使用Set集合

HashSet具有去重性

使用!Add即可

   /// <summary>
    /// 使用HashSet來(lái)解決,HashSet具有去重特性!
    /// </summary>
    /// <param name="nums"></param>
    public void SingleNumber2(int[] nums)
    {
        HashSet<int> hash = new HashSet<int>();
        for (int i = 0; i< nums.Length;i++)
        {
            if(!hash.Add(nums[i]))
            {
                hash.Remove(nums[i]);
            }
        }
        foreach (var item in hash)
            Debug.Log(item);
    }
}

十、多數(shù)元素

給定一個(gè)大小為 n 的數(shù)組?nums ,返回其中的多數(shù)元素。多數(shù)元素是指在數(shù)組中出現(xiàn)次數(shù) 大于?? n/2 ??的元素。

方法一、排序后輸出中間元素即可

public class Majority : MonoBehaviour
{
    int[] nums = { 1, 2, 3, 4, 5, 6, 7, 2, 2, 2, 2, 2 };
    private void Start()
    {
        Major1(nums);
        Major2(nums);
    }
    /// <summary>
    /// 方法1:先排序,再輸出一半中的元素
    /// </summary>
    /// <param name="nums"></param>
    public void Major1(int [] nums)
    {
        Array.Sort(nums);
        Debug.Log(nums[nums.Length/2]);
    }

方法二、摩爾投票法

把第一個(gè)元素作為開(kāi)始元素,如果緊接的兩個(gè)元素不相同,count就減,如果相同,count就加,到最后還剩下的count就是最多的元素

/// <summary>
    /// 方法2:摩爾投票法
    /// </summary>
    public void Major2(int[] nums)
    {
        int major = nums[0];
        int count = 1;
        for (int i = 1; i < nums.Length; i++)
        {
            //消除完了,就進(jìn)行下一個(gè)
            if(count == 0)
            {
                count++;
                major = nums[i];
            }
            //跟后面的元素相同的話,這個(gè)元素?cái)?shù)目就繼續(xù)增加
            else if(major == nums[i])
            {
                count++;
            }
            else
            {
                count--;
            }
        }
        Debug.Log(major);
    }
}

十一、合并兩個(gè)有序數(shù)組

給你兩個(gè)按 非遞減順序 排列的整數(shù)數(shù)組?nums1 和 nums2,另有兩個(gè)整數(shù) m 和 n ,分別表示 nums1 和 nums2 中的元素?cái)?shù)目。

請(qǐng)你 合并 nums2 到 nums1 中,使合并后的數(shù)組同樣按 非遞減順序 排列。

輸入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
輸出:[1,2,2,3,5,6]
解釋:需要合并 [1,2,3] 和 [2,5,6] 。
合并結(jié)果是 [1,2,2,3,5,6] ,其中斜體加粗標(biāo)注的為 nums1 中的元素。

方法1:使用三目運(yùn)算符

即:

x?y:z 表示如果表達(dá)式x為true,則返回y;
如果x為false,則返回z

是省略if{}else{}的簡(jiǎn)單形式。

using UnityEngine;
/// <summary>
/// 合并兩個(gè)有序數(shù)組
/// </summary>

public class Merge : MonoBehaviour
{
    int[] nums1 = { 1, 2, 3,0,0,0 };
    int[] nums2 = { 2, 5, 6 };
    private void Start()
    {
        MergeNums(nums1, 3, nums2, 3);
        foreach (var item in nums1)
        {
            Debug.Log(item);
        }
    }
    /// <summary>
    /// 合并有序數(shù)組方法1
    /// </summary>
    /// <param name="數(shù)組1"></param>
    /// <param name="數(shù)組1的長(zhǎng)度"></param>
    /// <param name="數(shù)組2"></param>
    /// <param name="數(shù)組2的長(zhǎng)度"></param>
    public int[] MergeNums(int[] nums1,int m,int[] nums2,int n)
    {
        int i = m - 1;
        int j = n - 1;
        int end = m + n - 1;
        while(j>=0)
        {
            nums1[end--] = (i >= 0 && nums1[i] > nums2[j]) ? nums1[i--] : nums2[j--];
        }
        return nums1;
    }
}

方法二:使用官方API

Array.Copy:合并兩個(gè)數(shù)組

Array.Sort:排序方法,由小及大

public void MegerNums2(int[] num1, int m ,int[] nums2, int n )
    {
        Array.Copy(nums2, 0, nums1, m, n);
        Array.Sort(nums1);
    }

十二、雞蛋掉落

給你 k 枚相同的雞蛋,并可以使用一棟從第 1 層到第 n 層共有 n 層樓的建筑。

已知存在樓層 f ,滿足?0 <= f <= n ,任何從 高于 f 的樓層落下的雞蛋都會(huì)碎,從 f 樓層或比它低的樓層落下的雞蛋都不會(huì)破。

每次操作,你可以取一枚沒(méi)有碎的雞蛋并把它從任一樓層 x 扔下(滿足?1 <= x <= n)。如果雞蛋碎了,你就不能再次使用它。如果某枚雞蛋扔下后沒(méi)有摔碎,則可以在之后的操作中 重復(fù)使用 這枚雞蛋。

請(qǐng)你計(jì)算并返回如果要確定?f?確切的值?的話,我們的?最小操作次數(shù)?是多少?

? ?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-462910.html

到了這里,關(guān)于游戲開(kāi)發(fā)中常用的算法1(20道題一篇文章)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 看完這篇文章你就徹底懂啦{保姆級(jí)講解}-----(LeetCode刷題977有序數(shù)組的平方) 2023.4.20

    看完這篇文章你就徹底懂啦{保姆級(jí)講解}-----(LeetCode刷題977有序數(shù)組的平方) 2023.4.20

    本文章一部分內(nèi)容參考于《代碼隨想錄》----如有侵權(quán)請(qǐng)聯(lián)系作者刪除即可,撰寫(xiě)本文章主要目的在于記錄自己學(xué)習(xí)體會(huì)并分享給大家,全篇并不僅僅是復(fù)制粘貼,更多的是加入了自己的思考,希望讀完此篇文章能真正幫助到您?。?! 力扣題目鏈接 分析題目 該數(shù)組為 非遞減

    2024年02月05日
    瀏覽(19)
  • 看完這篇文章你就徹底懂啦{保姆級(jí)講解}-----(LeetCode刷題59螺旋矩陣II) 2023.4.20

    看完這篇文章你就徹底懂啦{保姆級(jí)講解}-----(LeetCode刷題59螺旋矩陣II) 2023.4.20

    本文章一部分內(nèi)容參考于《代碼隨想錄》----如有侵權(quán)請(qǐng)聯(lián)系作者刪除即可,撰寫(xiě)本文章主要目的在于記錄自己學(xué)習(xí)體會(huì)并分享給大家,全篇并不僅僅是復(fù)制粘貼,更多的是加入了自己的思考,希望讀完此篇文章能真正幫助到您?。?! 力扣題目鏈接 分析題目: 元素按照 順時(shí)

    2024年02月05日
    瀏覽(25)
  • 七大 排序算法(一篇文章梳理)

    七大 排序算法(一篇文章梳理)

    排序算法是計(jì)算機(jī)科學(xué)中不可或缺的一部分,它們?cè)跀?shù)據(jù)處理、數(shù)據(jù)庫(kù)管理、搜索引擎、數(shù)據(jù)分析等多個(gè)領(lǐng)域都有廣泛的應(yīng)用。排序算法的主要任務(wù)是將一組數(shù)據(jù)元素按照某種特定的順序(如升序或降序)進(jìn)行排列。本文將對(duì)一些常見(jiàn)的排序算法進(jìn)行詳細(xì)的介紹和分析,包括

    2024年03月08日
    瀏覽(31)
  • Ubuntu20.04——一篇文章讓你從零配置VINS_Mono環(huán)境以及運(yùn)行(2023年最新)

    Ubuntu20.04——一篇文章讓你從零配置VINS_Mono環(huán)境以及運(yùn)行(2023年最新)

    注:文末包含該文章涉及的所有安裝包的網(wǎng)盤鏈接 零、換源(也可以先不換,后面覺(jué)得下載慢再換也行) 1、備份原來(lái)的源 2、打開(kāi)源保存文件 3、換源(換其中一個(gè)就行,也可以去搜別的源) 4、更新源 一、安裝git(克隆源代碼)、gedit(編輯文本)、cmake、gcc、g++、build-e

    2024年02月04日
    瀏覽(24)
  • 【Unity自制手冊(cè)】unity常用API大全——一篇文章足以(萬(wàn)字詳解)

    【Unity自制手冊(cè)】unity常用API大全——一篇文章足以(萬(wàn)字詳解)

    ?????個(gè)人主頁(yè) :@元宇宙-秩沅 hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! 本文由 秩沅 原創(chuàng) 收錄于專欄 unity 實(shí)戰(zhàn)系列 ?相關(guān)文章? ?【軟件設(shè)計(jì)師高頻考點(diǎn)暴擊】 -本站最全-unity常用API大全(萬(wàn)字詳解),不信你不收藏 -關(guān)于游戲劇情模式中用到的基礎(chǔ)簡(jiǎn)單API -控制游

    2024年02月12日
    瀏覽(85)
  • Python常用基礎(chǔ)語(yǔ)法知識(shí)點(diǎn)大全合集,看完這一篇文章就夠了

    Python 是一門獨(dú)特的語(yǔ)言,快速瀏覽一下他的要點(diǎn): 面向?qū)ο螅好恳粋€(gè)變量都是一個(gè)類,有其自己的屬性(attribute)與方法(method)。 語(yǔ)法塊:用縮進(jìn)(四個(gè)空格)而不是分號(hào)、花括號(hào)等符號(hào)來(lái)標(biāo)記。因此,行首的空格不能隨意書(shū)寫(xiě)。 注釋:行內(nèi)用“#”號(hào),行間注釋寫(xiě)在兩

    2023年04月22日
    瀏覽(32)
  • 【C++算法圖解專欄】一篇文章帶你掌握差分算法

    【C++算法圖解專欄】一篇文章帶你掌握差分算法

    ?個(gè)人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343 ??專欄定位:為 0 基礎(chǔ)剛?cè)腴T數(shù)據(jù)結(jié)構(gòu)與算法的小伙伴提供詳細(xì)的講解,也歡迎大佬們一起交流~ ??專欄地址:https://blog.csdn.net/Newin2020/article/details/126445229 ??如果有收獲的話,歡迎點(diǎn)贊??收藏??,您的支持就是我創(chuàng)

    2024年04月11日
    瀏覽(19)
  • 【最短路算法】一篇文章徹底弄懂Dijkstra算法|多圖解+代碼詳解

    【最短路算法】一篇文章徹底弄懂Dijkstra算法|多圖解+代碼詳解

    博主簡(jiǎn)介: 努力學(xué)習(xí)的大一在校計(jì)算機(jī)專業(yè)學(xué)生,熱愛(ài)學(xué)習(xí)和創(chuàng)作。目前在學(xué)習(xí)和分享:算法、數(shù)據(jù)結(jié)構(gòu)、Java等相關(guān)知識(shí)。 博主主頁(yè): @是瑤瑤子啦 所屬專欄: 算法 ;該專欄專注于藍(lán)橋杯和ACM等算法競(jìng)賽?? 近期目標(biāo): 寫(xiě)好專欄的每一篇文章 Dijkstra算法適用于 最短路問(wèn)題

    2023年04月08日
    瀏覽(20)
  • 【Unity】一篇文章搞定AStar(A*)算法

    【Unity】一篇文章搞定AStar(A*)算法

    AStar(A*)算法,是一種在靜態(tài)網(wǎng)格中求解最短路徑直接有效的搜索方法。在游戲開(kāi)發(fā)中,A*算法常應(yīng)用于部分RPG游戲和策略戰(zhàn)棋類游戲。對(duì)于Unity開(kāi)發(fā)者來(lái)說(shuō),掌握A*算法也是十分有必要的。不過(guò)在了解A*算法之前,有必要先回顧一下深度優(yōu)先算法(DFS)、廣度優(yōu)先算法(BFS)

    2024年02月02日
    瀏覽(20)
  • TD算法超詳細(xì)解釋,一篇文章看透徹!

    TD算法超詳細(xì)解釋,一篇文章看透徹!

    鄭重聲明:本系列內(nèi)容來(lái)源 趙世鈺(Shiyu Zhao)教授的強(qiáng)化學(xué)習(xí)數(shù)學(xué)原理系列,本推文出于非商業(yè)目的分享個(gè)人學(xué)習(xí)筆記和心得。如有侵權(quán),將刪除帖子。原文鏈接:https://github.com/MathFoundationRL/Book-Mathmatical-Foundation-of-Reinforcement-Learning 上一節(jié)我們講到, Robbins-Monro Algorithm 算法解

    2024年02月01日
    瀏覽(38)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包