C语言的遍历算法

有如下问题,在一个由0、1、beta、beta2这四个元素组成的矩阵当中,每一列都有这四个元素出现,现在要将这个矩阵置换成由0、1、2、3四个元素组成的矩阵,每一列的置换法则可以不同,例如,若矩阵有三列,可将第一列中的0、1、beta、beta2分别换成0、1、2、3,将第二列中的0、1、beta、beta2分别换成1、0、2、3,将第三列中的0、1、beta、beta2分别换成2、1、0、3,等等。这样显然可以看到,每一列元素的置换方法是4!种,含有三列的矩阵则共有(4!的三次方)种置换方法。
现在的问题是要编程遍历这所有的置换方法(这是一个程序中的一部分),大致的思路是怎样的?谢谢!

第1个回答  推荐于2018-04-10
思路1:
写出所有24种4个数的排列,存到一个数组里,假如数组是P[24][4];
那么可以
for (i = 0; i < 24; i++)
for (j = 0; j < 24; j++)
for (k = 0; k < 24; k++)
三层循环,P[i],P[j],P[k]分别是矩阵的三个列
思路2:
利用dfs递归枚举
int used[3][4];/*这个数组存放三个列中0~3这四个数是否已在这一列中出现过,需要提前清零*/
int mat[3][4];/*要枚举的矩阵*/
void dfs(int col, int row)/*col表示现在已经搜索到哪一列(从0开始编号),row表示这一列已经填了几行*/
{
int i;
if (col == 2 && row == 4)
{
....../*运行到这里的时候,mat就是枚举到的一个矩阵*/
return;
}
if (row == 4)
{row = 0; col++;}
for (i = 0; i < 4; i++)
if (!used[col][i])
{
used[col][i] = 1;
mat[col][row] = i;
dfs(col, row + 1);
used[col][i] = 0;
}
return;
}
调用的时候调用dfs(0,0)本回答被提问者和网友采纳

c语言遍历是什么意思?
C语言遍历是一种对数据结构如树或图中的节点进行有组织访问的过程。它涉及沿着特定路径逐个访问每个节点,所执行的操作根据实际问题需求,可能是检查节点的值、更新节点等。不同的遍历方法决定了访问节点的顺序,这是C语言进行复杂操作的基本手段。在顺序计算中,由于可能存在多个可访问的后续节点,我们必须...

c语言怎么遍历随机数
1、客户端向有名管道随机写入0-100的数。2、服务器端循环读取并打印数据,当连续3个超过50以上的数暂停5s后再继续进行,即可遍历随机数。

C语言中遍历是什么意思
遍历 就是把所有的元素都过一遍 比如 遍历数组 就是从第一个元素 到最后一个元素 遍历链表 就是从第一个节点 到最后一个节点。

c语言如何遍历素数?
遍历2到100之间所有整数,然后逐一判断是否为素数,如果是则存入数组。最终遍历数组输出每个值即可。 具体如下:1、素数的判断。根据素数定义,除了1和本身不存在其它约数的正整数为素数。所以在C语言中判断n是否为素数可以从2开始到到n-1逐一尝试,如果可以整除说明不是素数。更进一步,可以从2判断到n\/...

c语言使用循环语句实现自然数1~99的遍历
在 C 语言中,可以使用 for 循环语句来实现自然数1~99的遍历,如下所示:Copy code include <stdio.h> int main() { for (int i = 1; i <= 99; i++) { printf("%d ", i);} return 0;} 以上代码中,使用 for 循环遍历自然数199,循环变量 i 从1开始,每次递增1,直到...

C语言中的遍历是什么意思
所谓遍历,是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。简而言之,就是二叉树上每一个结点都被访问一次。分为先序、中序和后序遍历。

C语言遍历字符串数组?
针对每个字符遍历就可以,如果大字符串长度n、固定长度为m,那么循环为:for (i=0;i<n-m;i++){ ...}

C语言:怎样遍历1-N中只含0和1的数字
\/\/第一种:最简单最暴力也最蠢的办法#include<stdio.h>int text(int i){int j;j = i;while(j>0){if(j%10 > 1)return 0;j \/= 10;}return 1;}void main(){int n=1;int i;printf("输入n:");scanf("%d",&n);for(i=1; i<=n; i++){if(text(i) == 1)printf("%d\\...

C语言如何遍历二维数组 上三角、下三角、主对角线、副对角线?_百度知 ...
遍历上三角:int i,j;for (i=0;i<3;i++)for (j=i;j<3;j++) {a[i][j]……};遍历下三角:for(i=0;i<3;i++) for(j=0;j<=i;j++){a[i][j]...};遍历主对角线:for(i=0;i<3;i++){a[i][i]...};遍历副对角线:for(i=0,j=3-1;i<3;i++,j--){a[i][...

c语言遍历是什么意思?
c语言遍历是指沿着某条搜索路线,依次对树(或图)中每个节点均做一次访问。访问结点所做的操作依赖于具体的应用问题, 具体的访问操作可能是检查节点的值、更新节点的值等。不同的遍历方式,其访问节点的顺序是不一样的。遍历是是c语言上进行其它运算之基础。

相似回答