最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C語言通過遞歸與非遞歸實現(xiàn)蛇形矩陣

 更新時間:2022年02月10日 15:09:35   作者:誠摯的喬治  
蛇形矩陣(Snake matrix)是矩陣的一種,常被應(yīng)用在編程題目與數(shù)學(xué)數(shù)列中,需要提取每條斜線里最小的數(shù)字,本篇文章將會通過遞歸和非遞歸來分別實現(xiàn)蛇形矩陣

前言:

本次蛇形矩陣我將以兩種方法來實現(xiàn),即非遞歸和遞歸

非遞歸的實現(xiàn):

#define right 1
#define down 2
#define left 3
#define up 4
#define n 5     //控制矩形的大小
#include<stdio.h>
int main()//設(shè)計一個蛇形矩形圖案 順時針
{
	int m = 1; int x = 1; int y = 1; int direct; int i = 0;
	int j = 0;
	int arr[n + 1][n + 1];
	for (x = 1; x < (n + 1); x++)
	{
		for (y = 1; y < (n + 1); y++)
		{
			arr[x][y] = 100;//隨機(jī)但是不能定為零
		}
	}
	x = 1; y = 1; direct = right;
	while (m <= n * n)
	{
		arr[x][y] = m++;
		switch (direct)
		{
		case right:
			if (arr[x][y + 1] == 100)
			{
				y++;
			}
			else
			{
				direct = down;
				x++;
			}break;
		case down:
			if (arr[x + 1][y] == 100)
			{
				x++;
			}
			else
			{
				direct = left;
				y--;
			}break;
 
		case left:
			if (arr[x][y - 1] == 100)
			{
				y--;
			}
			else
			{
				direct = up;
				x--;
			}break;
		case up:
			if (arr[x - 1][y] == 100)
			{
				x--;
			}
			else
			{
				direct = right;
				y++;
			}break;
		}
	}
	//顯示矩形
	for (x = 1; x <= n; x++)
	{
		for (y = 1; y <= n; y++)
		{
			printf("%2d ", arr[x][y]);
		}
		printf("\n");
	}
	return 0;
}

非遞歸的解題思想:定義一個數(shù)組,這個數(shù)組的大小是(N+1)*(N+1),目的是形成一個邊框,便于調(diào)整方向,其次就是當(dāng)x與y跑到邊框的位置就實現(xiàn)拐彎。

拐彎的思想就是上到下,下到左,左到上,上再到右,實現(xiàn)從外圍向內(nèi)包圍,直至m <= n * n。

遞歸的實現(xiàn):

 
#define right 1
#define down 2
#define left 3
#define up 4
#define n 7          //控制大小
int arr[n][n];
#include<stdio.h>
void snake(int x, int y, int m, int direct)
    {
      arr[x][y]=m;
  	if (m == n * n)
		return;
 	switch (direct)
	{
	case right:
 		if ((y+1) == (n+1) || arr[x][y+1] > 0)
 
		{//到達(dá)右邊邊界或者右邊有數(shù)字,不能再往右
			direct = down; //改變方向,向下
			x++; //向下移動一格
		}
		else     //可以向右填寫
   			y++; //向右移動一格
		break;
	case down:
		if ((x + 1) == (n+1) || arr[x + 1][y] > 0)
		{
			direct = left;
			y--;
		}
		else
			x++;
		break;
	case left:
		if ((y + 1) == (n+1) || arr[x][y - 1] > 0)
		{
			direct = up;
			x--;
		}
		else
			y--;
		break;
	case up:
		if ((y + 1) == (n+1) || arr[x-1][y] > 0)
		{
			direct = right;
			y++;
		}
		else
			x--;
		break;
	}
    	snake(x, y, ++m, direct); //填寫下一個數(shù)
}
int main()//用遞歸填寫這個矩形蛇形圖案
 {
	int x = 1; int y = 1; int m = 1;
 	snake(x, y, m, right);
	//顯示矩形
	for (x = 1; x <= n; x++)
	{
 		for (y = 1; y <= n; y++)
		{
 			printf("%2d ", arr[x][y]);//這里有個二,別忘了
 		}
		printf("\n");
	}
	return 0;
}

遞歸的實現(xiàn)大體思路跟非遞歸的實現(xiàn)類似,從外面到內(nèi)部

但遞歸的每一個元素是單獨在一個函數(shù)里來定義的,直至最后的m==n*n,然后再main函數(shù)里實現(xiàn)最終的模型。

其中的n是來控制大小,例如當(dāng)n為5和9的結(jié)果如下:

到此這篇關(guān)于詳解C語言通過遞歸與非遞歸實現(xiàn)蛇形矩陣的文章就介紹到這了,更多相關(guān)C語言 蛇形矩陣內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言scanf語句吃掉回車或者空格問題及解決

    C語言scanf語句吃掉回車或者空格問題及解決

    這篇文章主要介紹了C語言scanf語句吃掉回車或者空格問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++中按引用傳遞參數(shù)的好處有哪些

    C++中按引用傳遞參數(shù)的好處有哪些

    這篇文章主要介紹了C++中按引用傳遞參數(shù)的好處有哪些,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • C++實現(xiàn)簡單迷宮游戲

    C++實現(xiàn)簡單迷宮游戲

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)簡單迷宮游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • Arduino控制舵機(jī)詳解 附代碼

    Arduino控制舵機(jī)詳解 附代碼

    rduino是一款便捷靈活、方便上手的開源電子原型平臺,它構(gòu)建于開放原始碼simple I/O介面版,并且具有使用類似Java、C語言的Processing/Wiring開發(fā)環(huán)境,這篇文章主要介紹了Arduino控制舵機(jī)詳解(含代碼),需要的朋友可以參考下
    2023-05-05
  • C++位圖的實現(xiàn)原理與方法

    C++位圖的實現(xiàn)原理與方法

    位圖(bitset)是一種常用的數(shù)據(jù)結(jié)構(gòu),常用在給一個很大范圍的數(shù),判斷其中的一個數(shù)是不是在其中。這篇文章主要給大家介紹了關(guān)于C++位圖以及位圖的實現(xiàn)原理與方法,需要的朋友可以參考下
    2021-05-05
  • C/C++ int數(shù)與多枚舉值互轉(zhuǎn)的實現(xiàn)

    C/C++ int數(shù)與多枚舉值互轉(zhuǎn)的實現(xiàn)

    在C/C++在C/C++的開發(fā)中經(jīng)常會遇到各種數(shù)據(jù)類型互轉(zhuǎn)的情況,本文主要介紹了C/C++ int數(shù)與多枚舉值互轉(zhuǎn)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2021-08-08
  • C++類重載函數(shù)的function和bind使用示例

    C++類重載函數(shù)的function和bind使用示例

    這篇文章主要介紹了C++類重載函數(shù)的function和bind使用示例,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2021-01-01
  • C語言實現(xiàn)掃雷OvO(完整代碼)

    C語言實現(xiàn)掃雷OvO(完整代碼)

    相信大家都玩過掃雷游戲,因為它太經(jīng)典了,今天我們用C語言來模擬實現(xiàn)掃雷游戲,結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2022-04-04
  • C++實現(xiàn)假裝藍(lán)屏整蠱小程序

    C++實現(xiàn)假裝藍(lán)屏整蠱小程序

    因為工作的需要,有時候我們離開時并不想讓別人看到我們電腦的內(nèi)容,所以本文為大家分享了一個基于C++實現(xiàn)的假裝藍(lán)屏的小程序,需要的可以參考下
    2023-06-06
  • C語言宏函數(shù)container of()簡介

    C語言宏函數(shù)container of()簡介

    這篇文章介紹了C語言宏函數(shù)container of(),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評論

特克斯县| 同江市| 金川县| 十堰市| 镇巴县| 大姚县| 乡宁县| 海门市| 伊川县| 仙游县| 阜康市| 客服| 威海市| 仁怀市| 苏尼特左旗| 遂昌县| 永顺县| 建德市| 临朐县| 甘洛县| 江安县| 成安县| 邵武市| 东乡族自治县| 闵行区| 汉沽区| 精河县| 洪泽县| 开阳县| 库尔勒市| 乌拉特中旗| 广安市| 五大连池市| 清原| 渝中区| 平江县| 梁河县| 宁河县| 德州市| 慈溪市| 五河县|