算法分析与设计——格雷码

算法分析与设计——格雷码

#include <stdio.h>   

#include <stdlib.h>   

  

#define MAX 1024   

#define M 10

  

int a[MAX][M];   

  

void ForeCode(int forenum, int n)  

{  

    int i, j;  

    for(i = 0; i <= forenum; i++)

        for(j = n - 2; j >= 0; j--)  

            a[i][j + 1] = a[i][j];  

    for(i = 0; i <= forenum; i++)  

        a[i][0] = 0;  

}  

void BackCode(int backbegin, int backend, int n)  

{  

    int i, j;  

    for(i = 0; i < backbegin; i++)

        for(j = 1; j < n; j++)  

            a[backend - i - 1][j] = a[i][j];  

        for(i = backbegin; i < backend; i++)

            a[i][0] = 1;  

}  

void GrayCode(int nBits)  

{  

    int i, k, m = 1;  

    if(nBits == 1)  

    {  

        a[0][0] = 0;  

        a[1][0] = 1;  

    }  

    else  

        GrayCode(nBits - 1);

    for(i = 0; i < nBits; i++)  

        m = 2 * m;    

    k = m / 2;  

    ForeCode(k - 1, nBits);  

    BackCode(k, m, nBits);  

}  

  

void PrintGrayCode(int nBits)  

{  

    int i, j, m = 1;  

    for(i = 0; i < nBits; i++)  

        m = 2 * m;  

    for(i = 0; i < m; i++)  

    {  

        for(j = 0; j < nBits; j++)  

            printf("%d", a[i][j]);  

        printf(" ");  

    }  

}  

  

  

int main()  

{  

    int nBit;  

    printf("请输入n值为:",nBit);

scanf("%d",&nBit);

    GrayCode(nBit);  

    PrintGrayCode(nBit);  

    return 0;  

}  

运行结果截图

算法分析与设计——格雷码