关于多维数组

鹏割 2014-05-12 08:35:36
求大神帮忙,我在写随机生成稀疏矩阵的代码,风向标有 rowNum(行号),colNum(列号),toltalNum(非零元素个数),和*data(稀疏矩阵动态存储空间的首地址),我已经随机生成了行号和列号和非零元素个数,现在需要输出一个稀疏矩阵,比如

【0】 【1】
【0】 0 0
【1】 0 1,想达到这种效果,求大神指教一个大致的思路,我可以再慢慢研究,谢了
...全文
204 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SKATE11 2014-05-13
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
仅供参考
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int d[6];
int i,n,a,b,t;
int c,j;
void main() {
    srand(time(NULL));
    printf("shuffle 0..n-1 demo\n");
    for (n=1;n<=5;n++) {/* 测试1~5个元素 */
        printf("_____n=%d_____\n",n);
        j=1;
        for (c=1;c<=n;c++) j=j*c;/* j为n! */
        j*=n*2;
        for (c=1;c<=j;c++) {/* 测试n*2*n!次 */
            for (i=0;i<n;i++) d[i]=i;/* 填写0~n-1 */
            for (i=n;i>0;i--) {/* 打乱0~n-1 */
                a=i-1;b=rand()%i;
                if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
            }
            printf("%04d:",c);
            for (i=0;i<n;i++) printf("%d",d[i]);
            printf("\n");
        }
    }
    printf("shuffle 1..n demo\n");
    for (n=1;n<=5;n++) {/* 测试1~5个元素 */
        printf("_____n=%d_____\n",n);
        j=1;
        for (c=1;c<=n;c++) j=j*c;/* j为n! */
        j*=n*2;
        for (c=1;c<=j;c++) {/* 测试n*2*n!次 */
            for (i=1;i<=n;i++) d[i]=i;/* 填写1~n */
            for (i=n;i>1;i--) {/* 打乱1~n */
                a=i;b=rand()%i+1;
                if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
            }
            printf("%04d:",c);
            for (i=1;i<=n;i++) printf("%d",d[i]);
            printf("\n");
        }
    }
}
赵老师真勤快 赞一个
赵4老师 2014-05-13
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int d[6];
int i,n,a,b,t;
int c,j;
void main() {
    srand(time(NULL));
    printf("shuffle 0..n-1 demo\n");
    for (n=1;n<=5;n++) {/* 测试1~5个元素 */
        printf("_____n=%d_____\n",n);
        j=1;
        for (c=1;c<=n;c++) j=j*c;/* j为n! */
        j*=n*2;
        for (c=1;c<=j;c++) {/* 测试n*2*n!次 */
            for (i=0;i<n;i++) d[i]=i;/* 填写0~n-1 */
            for (i=n;i>0;i--) {/* 打乱0~n-1 */
                a=i-1;b=rand()%i;
                if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
            }
            printf("%04d:",c);
            for (i=0;i<n;i++) printf("%d",d[i]);
            printf("\n");
        }
    }
    printf("shuffle 1..n demo\n");
    for (n=1;n<=5;n++) {/* 测试1~5个元素 */
        printf("_____n=%d_____\n",n);
        j=1;
        for (c=1;c<=n;c++) j=j*c;/* j为n! */
        j*=n*2;
        for (c=1;c<=j;c++) {/* 测试n*2*n!次 */
            for (i=1;i<=n;i++) d[i]=i;/* 填写1~n */
            for (i=n;i>1;i--) {/* 打乱1~n */
                a=i;b=rand()%i+1;
                if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
            }
            printf("%04d:",c);
            for (i=1;i<=n;i++) printf("%d",d[i]);
            printf("\n");
        }
    }
}
鹏割 2014-05-13
  • 打赏
  • 举报
回复
dada
鹏割 2014-05-13
  • 打赏
  • 举报
回复
引用 3 楼 Falleyes 的回复:
使用3元组的结构体,结构体内分别存x,y,num(数值),如果非0的数值都是1,那就只用存x和y。 首先,如果是你随机,那么就要排序,按照行x为主排序,列y为辅排序。 最后嵌套for循环,同时移动三元组的指针,坐标不想等,打印0,坐标相等,打印num值(或者1)。
谢了
鹏割 2014-05-13
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
再供参考
//定义一个特殊的随机二维数组,比如A[10][10],其中的元素只有0和1,而且0的个数给定,有50个
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int d[100];
int i,j,n,a,b,t;
int A[10][10];
int main() {
    srand(time(NULL));
    n=100;
    for (i=0;i<n;i++) d[i]=i;/* 填写0~99 */
    for (i=n;i>0;i--) {/* 打乱0~99 */
        a=i-1;b=rand()%i;
        if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
    }

    for (i=0;i<10;i++) {
        for (j=0;j<10;j++) {
            A[i][j]=(d[i*10+j]>=50)?1:0;
            printf("%d ",A[i][j]);
        }
        printf("\n");
    }
    return 0;
}
//1 0 0 1 1 0 1 1 0 1
//0 1 0 0 0 0 1 0 1 0
//0 1 1 1 1 0 1 1 0 0
//1 1 0 1 1 1 1 1 0 0
//1 1 1 0 0 0 1 1 0 1
//0 1 0 0 0 0 1 1 1 0
//0 0 1 0 0 1 0 0 1 1
//0 0 0 0 1 1 0 0 0 0
//1 1 0 0 0 1 0 1 0 1
//1 1 1 1 1 0 0 0 1 1
//
感激不尽
Falleyes 2014-05-13
  • 打赏
  • 举报
回复
使用3元组的结构体,结构体内分别存x,y,num(数值),如果非0的数值都是1,那就只用存x和y。 首先,如果是你随机,那么就要排序,按照行x为主排序,列y为辅排序。 最后嵌套for循环,同时移动三元组的指针,坐标不想等,打印0,坐标相等,打印num值(或者1)。
赵4老师 2014-05-13
  • 打赏
  • 举报
回复
再供参考
//定义一个特殊的随机二维数组,比如A[10][10],其中的元素只有0和1,而且0的个数给定,有50个
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int d[100];
int i,j,n,a,b,t;
int A[10][10];
int main() {
    srand(time(NULL));
    n=100;
    for (i=0;i<n;i++) d[i]=i;/* 填写0~99 */
    for (i=n;i>0;i--) {/* 打乱0~99 */
        a=i-1;b=rand()%i;
        if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
    }

    for (i=0;i<10;i++) {
        for (j=0;j<10;j++) {
            A[i][j]=(d[i*10+j]>=50)?1:0;
            printf("%d ",A[i][j]);
        }
        printf("\n");
    }
    return 0;
}
//1 0 0 1 1 0 1 1 0 1
//0 1 0 0 0 0 1 0 1 0
//0 1 1 1 1 0 1 1 0 0
//1 1 0 1 1 1 1 1 0 0
//1 1 1 0 0 0 1 1 0 1
//0 1 0 0 0 0 1 1 1 0
//0 0 1 0 0 1 0 0 1 1
//0 0 0 0 1 1 0 0 0 0
//1 1 0 0 0 1 0 1 0 1
//1 1 1 1 1 0 0 0 1 1
//
鹏割 2014-05-12
  • 打赏
  • 举报
回复
顶顶顶
鹏割 2014-05-12
  • 打赏
  • 举报
回复
在线等啊aaa

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧