问题是超过时间限制,该怎么改
#include
#include
#define MAX 100
typedef struct {
int row,col;
int e;
}Triple;
typedef struct {
Triple data[101];
}Mat;
int main(){
Mat *A=(Mat*)malloc(MAX*sizeof(Mat));
Mat *B=(Mat*)malloc(MAX*sizeof(Mat));
Mat *C=(Mat*)malloc(MAX*sizeof(Mat));
scanf("%d,%d,%d;%d,%d,%d\n",&A->data[1].row,&A->data[1].col,&A->data[1].e,&A->data[2].row,&A->data[2].col,&A->data[2].e);
scanf("%d,%d,%d;%d,%d,%d\n",&B->data[1].row,&B->data[1].col,&B->data[1].e,&B->data[2].row,&B->data[2].col,&B->data[2].e);
int i,j;int m,n;
int cou=0;
int flag1=0;int flag2=0;
for(i=1;i<3;i++)
{
for(j=1;j<3;j++)
{
if((A->data[i].row!=B->data[j].row)||(A->data[i].col!=B->data[j].col)) flag1;
else flag1++;
}
if(flag1=0){
cou++;
C->data[cou].row=A->data[i].row;
C->data[cou].col=A->data[i].col;
C->data[cou].e=A->data[i].e;
}
else {
int q=1;
while((A->data[i].row!=B->data[q].row)||(A->data[i].col!=B->data[q].col)){
j++;
}
cou++;
C->data[cou].row=A->data[i].row;
C->data[cou].col=A->data[i].col;
C->data[cou].e=A->data[i].e+B->data[q].e;
}
}
for(m=1;m<3;m++){
for(n=1;n<3;n++){
if((A->data[n].row!=B->data[m].row)||(A->data[n].col!=B->data[m].col)) flag2;
else flag2++;
}
if(flag2=0){
cou++;
C->data[cou].row=B->data[m].row;
C->data[cou].col=B->data[m].col;
C->data[cou].e=B->data[m].e;
}
}
for(int p=1;C->data[p].e!=0&&p<5;p++)
{
scanf("%d,%d,%d;",C->data[p].row,C->data[p].col,C->data[p].e);
}
printf("\n");
}
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
typedef struct {
int row, col;
int e;
} Triple;
typedef struct {
Triple data[MAX];
int len;
} Mat;
int main() {
Mat A = {0}, B = {0}, C = {0}; // 初始化三个矩阵的长度为0
char line[MAX]; // 定义一个字符数组,用于暂存输入的一行数据
int i, j, m, n, cou = 0, flag1 = 0, flag2 = 0;
/* 输入A矩阵 */
fgets(line, MAX, stdin);
sscanf(line, "%d,%d,%d;%d,%d,%d", &A.data[1].row, &A.data[1].col, &A.data[1].e,
&A.data[2].row, &A.data[2].col, &A.data[2].e);
/* 输入B矩阵 */
fgets(line, MAX, stdin);
sscanf(line, "%d,%d,%d;%d,%d,%d", &B.data[1].row, &B.data[1].col, &B.data[1].e,
&B.data[2].row, &B.data[2].col, &B.data[2].e);
for(i = 1; i <= 2; i++) {
for(j = 1; j <= 2; j++) {
if(A.data[i].row == B.data[j].row && A.data[i].col == B.data[j].col) {
/* 如果A和B中都有相同位置的元素,则将它们相加保存在C中 */
cou++;
C.data[cou].row = A.data[i].row;
C.data[cou].col = A.data[i].col;
C.data[cou].e = A.data[i].e + B.data[j].e;
}
}
}
/* 将A中不在B中出现的元素保存到C中 */
for(i = 1; i <= 2; i++) {
flag1 = 0;
for(j = 1; j <= 2; j++) {
if(A.data[i].row == B.data[j].row && A.data[i].col == B.data[j].col) {
flag1 = 1;
break;
}
}
if(flag1 == 0) {
cou++;
C.data[cou].row = A.data[i].row;
C.data[cou].col = A.data[i].col;
C.data[cou].e = A.data[i].e;
}
}
/* 将B中不在A中出现的元素保存到C中 */
for(i = 1; i <= 2; i++) {
flag2 = 0;
for(j = 1; j <= 2; j++) {
if(B.data[i].row == A.data[j].row && B.data[i].col == A.data[j].col) {
flag2 = 1;
break;
}
}
if(flag2 == 0) {
cou++;
C.data[cou].row = B.data[i].row;
C.data[cou].col = B.data[i].col;
C.data[cou].e = B.data[i].e;
}
}
C.len = cou; // 记录C矩阵的实际长度
/* 输入C中的元素 */
for(i = 1; i <= C.len; i++) {
fgets(line, MAX, stdin);
sscanf(line, "%d,%d,%d", &C.data[i].row, &C.data[i].col, &C.data[i].e);
}
/* 输出C矩阵 */
for(i = 1; i <= C.len; i++) {
printf("%d,%d,%d;", C.data[i].row, C.data[i].col, C.data[i].e);
}
printf("\n");
return 0;
}
双链表的结点中有两个指针域,一个指向后一结点,一个指向前一结点,结点结构如图所示
💬 代码演示
双链表结点:
typedef struct DNode
{
ElemType data;
struct DNode *prior,*next;
}DNode, *DLinklist;